1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_accessibility.hxx" 26*b1cdbd2cSJim Jagielski #include <accessibility/extended/accessibletabbar.hxx> 27*b1cdbd2cSJim Jagielski #include <svtools/tabbar.hxx> 28*b1cdbd2cSJim Jagielski #include <accessibility/extended/accessibletabbarpagelist.hxx> 29*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp> 30*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp> 32*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx> 33*b1cdbd2cSJim Jagielski #include <unotools/accessiblerelationsethelper.hxx> 34*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx> 35*b1cdbd2cSJim Jagielski #include <toolkit/awt/vclxfont.hxx> 36*b1cdbd2cSJim Jagielski #include <toolkit/helper/convert.hxx> 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #include <vector> 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski //......................................................................... 42*b1cdbd2cSJim Jagielski namespace accessibility 43*b1cdbd2cSJim Jagielski { 44*b1cdbd2cSJim Jagielski //......................................................................... 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski using namespace ::com::sun::star; 47*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno; 48*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang; 49*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility; 50*b1cdbd2cSJim Jagielski using namespace ::comphelper; 51*b1cdbd2cSJim Jagielski DBG_NAME(AccessibleTabBar)52*b1cdbd2cSJim Jagielski DBG_NAME( AccessibleTabBar ) 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski // ---------------------------------------------------- 55*b1cdbd2cSJim Jagielski // class AccessibleTabBar 56*b1cdbd2cSJim Jagielski // ---------------------------------------------------- 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski AccessibleTabBar::AccessibleTabBar( TabBar* pTabBar ) 59*b1cdbd2cSJim Jagielski :AccessibleTabBarBase( pTabBar ) 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski DBG_CTOR( AccessibleTabBar, NULL ); 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 64*b1cdbd2cSJim Jagielski m_aAccessibleChildren.assign( m_pTabBar->GetAccessibleChildWindowCount() + 1, Reference< XAccessible >() ); 65*b1cdbd2cSJim Jagielski } 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 68*b1cdbd2cSJim Jagielski ~AccessibleTabBar()69*b1cdbd2cSJim Jagielski AccessibleTabBar::~AccessibleTabBar() 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski DBG_DTOR( AccessibleTabBar, NULL ); 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski 74*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 75*b1cdbd2cSJim Jagielski ProcessWindowEvent(const VclWindowEvent & rVclWindowEvent)76*b1cdbd2cSJim Jagielski void AccessibleTabBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) 77*b1cdbd2cSJim Jagielski { 78*b1cdbd2cSJim Jagielski Any aOldValue, aNewValue; 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski switch ( rVclWindowEvent.GetId() ) 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski case VCLEVENT_WINDOW_ENABLED: 83*b1cdbd2cSJim Jagielski { 84*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::SENSITIVE; 85*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 86*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::ENABLED; 87*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 88*b1cdbd2cSJim Jagielski } 89*b1cdbd2cSJim Jagielski break; 90*b1cdbd2cSJim Jagielski case VCLEVENT_WINDOW_DISABLED: 91*b1cdbd2cSJim Jagielski { 92*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::ENABLED; 93*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 94*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::SENSITIVE; 95*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski break; 98*b1cdbd2cSJim Jagielski case VCLEVENT_WINDOW_GETFOCUS: 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::FOCUSED; 101*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 102*b1cdbd2cSJim Jagielski } 103*b1cdbd2cSJim Jagielski break; 104*b1cdbd2cSJim Jagielski case VCLEVENT_WINDOW_LOSEFOCUS: 105*b1cdbd2cSJim Jagielski { 106*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::FOCUSED; 107*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski break; 110*b1cdbd2cSJim Jagielski case VCLEVENT_WINDOW_SHOW: 111*b1cdbd2cSJim Jagielski { 112*b1cdbd2cSJim Jagielski aNewValue <<= AccessibleStateType::SHOWING; 113*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski break; 116*b1cdbd2cSJim Jagielski case VCLEVENT_WINDOW_HIDE: 117*b1cdbd2cSJim Jagielski { 118*b1cdbd2cSJim Jagielski aOldValue <<= AccessibleStateType::SHOWING; 119*b1cdbd2cSJim Jagielski NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski break; 122*b1cdbd2cSJim Jagielski default: 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski AccessibleTabBarBase::ProcessWindowEvent( rVclWindowEvent ); 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski break; 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 131*b1cdbd2cSJim Jagielski FillAccessibleStateSet(utl::AccessibleStateSetHelper & rStateSet)132*b1cdbd2cSJim Jagielski void AccessibleTabBar::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet ) 133*b1cdbd2cSJim Jagielski { 134*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski if ( m_pTabBar->IsEnabled() ) 137*b1cdbd2cSJim Jagielski { 138*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::ENABLED ); 139*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::SENSITIVE ); 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::FOCUSABLE ); 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski if ( m_pTabBar->HasFocus() ) 145*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::FOCUSED ); 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::VISIBLE ); 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski if ( m_pTabBar->IsVisible() ) 150*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::SHOWING ); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski if ( m_pTabBar->GetStyle() & WB_SIZEABLE ) 153*b1cdbd2cSJim Jagielski rStateSet.AddState( AccessibleStateType::RESIZABLE ); 154*b1cdbd2cSJim Jagielski } 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 158*b1cdbd2cSJim Jagielski // OCommonAccessibleComponent 159*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 160*b1cdbd2cSJim Jagielski implGetBounds()161*b1cdbd2cSJim Jagielski awt::Rectangle AccessibleTabBar::implGetBounds() throw (RuntimeException) 162*b1cdbd2cSJim Jagielski { 163*b1cdbd2cSJim Jagielski awt::Rectangle aBounds; 164*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 165*b1cdbd2cSJim Jagielski aBounds = AWTRectangle( Rectangle( m_pTabBar->GetPosPixel(), m_pTabBar->GetSizePixel() ) ); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski return aBounds; 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 171*b1cdbd2cSJim Jagielski // XInterface 172*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 173*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE2(AccessibleTabBar,AccessibleExtendedComponentHelper_BASE,AccessibleTabBar_BASE)174*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XINTERFACE2( AccessibleTabBar, AccessibleExtendedComponentHelper_BASE, AccessibleTabBar_BASE ) 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 177*b1cdbd2cSJim Jagielski // XTypeProvider 178*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccessibleTabBar, AccessibleExtendedComponentHelper_BASE, AccessibleTabBar_BASE ) 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 183*b1cdbd2cSJim Jagielski // XComponent 184*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski void AccessibleTabBar::disposing() 187*b1cdbd2cSJim Jagielski { 188*b1cdbd2cSJim Jagielski AccessibleTabBarBase::disposing(); 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski // dispose all children 191*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i ) 192*b1cdbd2cSJim Jagielski { 193*b1cdbd2cSJim Jagielski Reference< XComponent > xComponent( m_aAccessibleChildren[i], UNO_QUERY ); 194*b1cdbd2cSJim Jagielski if ( xComponent.is() ) 195*b1cdbd2cSJim Jagielski xComponent->dispose(); 196*b1cdbd2cSJim Jagielski } 197*b1cdbd2cSJim Jagielski m_aAccessibleChildren.clear(); 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 201*b1cdbd2cSJim Jagielski // XServiceInfo 202*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 203*b1cdbd2cSJim Jagielski getImplementationName()204*b1cdbd2cSJim Jagielski ::rtl::OUString AccessibleTabBar::getImplementationName() throw (RuntimeException) 205*b1cdbd2cSJim Jagielski { 206*b1cdbd2cSJim Jagielski return ::rtl::OUString::createFromAscii( "com.sun.star.comp.svtools.AccessibleTabBar" ); 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 210*b1cdbd2cSJim Jagielski supportsService(const::rtl::OUString & rServiceName)211*b1cdbd2cSJim Jagielski sal_Bool AccessibleTabBar::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException) 212*b1cdbd2cSJim Jagielski { 213*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() ); 214*b1cdbd2cSJim Jagielski const ::rtl::OUString* pNames = aNames.getConstArray(); 215*b1cdbd2cSJim Jagielski const ::rtl::OUString* pEnd = pNames + aNames.getLength(); 216*b1cdbd2cSJim Jagielski for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames ) 217*b1cdbd2cSJim Jagielski ; 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski return pNames != pEnd; 220*b1cdbd2cSJim Jagielski } 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 223*b1cdbd2cSJim Jagielski getSupportedServiceNames()224*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > AccessibleTabBar::getSupportedServiceNames() throw (RuntimeException) 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aNames(1); 227*b1cdbd2cSJim Jagielski aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleTabBar" ); 228*b1cdbd2cSJim Jagielski return aNames; 229*b1cdbd2cSJim Jagielski } 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 232*b1cdbd2cSJim Jagielski // XAccessible 233*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 234*b1cdbd2cSJim Jagielski getAccessibleContext()235*b1cdbd2cSJim Jagielski Reference< XAccessibleContext > AccessibleTabBar::getAccessibleContext( ) throw (RuntimeException) 236*b1cdbd2cSJim Jagielski { 237*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski return this; 240*b1cdbd2cSJim Jagielski } 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 243*b1cdbd2cSJim Jagielski // XAccessibleContext 244*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 245*b1cdbd2cSJim Jagielski getAccessibleChildCount()246*b1cdbd2cSJim Jagielski sal_Int32 AccessibleTabBar::getAccessibleChildCount() throw (RuntimeException) 247*b1cdbd2cSJim Jagielski { 248*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski return m_aAccessibleChildren.size(); 251*b1cdbd2cSJim Jagielski } 252*b1cdbd2cSJim Jagielski 253*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 254*b1cdbd2cSJim Jagielski getAccessibleChild(sal_Int32 i)255*b1cdbd2cSJim Jagielski Reference< XAccessible > AccessibleTabBar::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException) 256*b1cdbd2cSJim Jagielski { 257*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski if ( i < 0 || i >= getAccessibleChildCount() ) 260*b1cdbd2cSJim Jagielski throw IndexOutOfBoundsException(); 261*b1cdbd2cSJim Jagielski 262*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild = m_aAccessibleChildren[i]; 263*b1cdbd2cSJim Jagielski if ( !xChild.is() ) 264*b1cdbd2cSJim Jagielski { 265*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 266*b1cdbd2cSJim Jagielski { 267*b1cdbd2cSJim Jagielski sal_Int32 nCount = m_pTabBar->GetAccessibleChildWindowCount(); 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski if ( i < nCount ) 270*b1cdbd2cSJim Jagielski { 271*b1cdbd2cSJim Jagielski Window* pChild = m_pTabBar->GetAccessibleChildWindow( (sal_uInt16)i ); 272*b1cdbd2cSJim Jagielski if ( pChild ) 273*b1cdbd2cSJim Jagielski xChild = pChild->GetAccessible(); 274*b1cdbd2cSJim Jagielski } 275*b1cdbd2cSJim Jagielski else if ( i == nCount ) 276*b1cdbd2cSJim Jagielski { 277*b1cdbd2cSJim Jagielski xChild = new AccessibleTabBarPageList( m_pTabBar, i ); 278*b1cdbd2cSJim Jagielski } 279*b1cdbd2cSJim Jagielski 280*b1cdbd2cSJim Jagielski // insert into child list 281*b1cdbd2cSJim Jagielski m_aAccessibleChildren[i] = xChild; 282*b1cdbd2cSJim Jagielski } 283*b1cdbd2cSJim Jagielski } 284*b1cdbd2cSJim Jagielski 285*b1cdbd2cSJim Jagielski return xChild; 286*b1cdbd2cSJim Jagielski } 287*b1cdbd2cSJim Jagielski 288*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 289*b1cdbd2cSJim Jagielski getAccessibleParent()290*b1cdbd2cSJim Jagielski Reference< XAccessible > AccessibleTabBar::getAccessibleParent( ) throw (RuntimeException) 291*b1cdbd2cSJim Jagielski { 292*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 293*b1cdbd2cSJim Jagielski 294*b1cdbd2cSJim Jagielski Reference< XAccessible > xParent; 295*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 296*b1cdbd2cSJim Jagielski { 297*b1cdbd2cSJim Jagielski Window* pParent = m_pTabBar->GetAccessibleParentWindow(); 298*b1cdbd2cSJim Jagielski if ( pParent ) 299*b1cdbd2cSJim Jagielski xParent = pParent->GetAccessible(); 300*b1cdbd2cSJim Jagielski } 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski return xParent; 303*b1cdbd2cSJim Jagielski } 304*b1cdbd2cSJim Jagielski 305*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 306*b1cdbd2cSJim Jagielski getAccessibleIndexInParent()307*b1cdbd2cSJim Jagielski sal_Int32 AccessibleTabBar::getAccessibleIndexInParent( ) throw (RuntimeException) 308*b1cdbd2cSJim Jagielski { 309*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski sal_Int32 nIndexInParent = -1; 312*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 313*b1cdbd2cSJim Jagielski { 314*b1cdbd2cSJim Jagielski Window* pParent = m_pTabBar->GetAccessibleParentWindow(); 315*b1cdbd2cSJim Jagielski if ( pParent ) 316*b1cdbd2cSJim Jagielski { 317*b1cdbd2cSJim Jagielski for ( sal_uInt16 i = 0, nCount = pParent->GetAccessibleChildWindowCount(); i < nCount; ++i ) 318*b1cdbd2cSJim Jagielski { 319*b1cdbd2cSJim Jagielski Window* pChild = pParent->GetAccessibleChildWindow( i ); 320*b1cdbd2cSJim Jagielski if ( pChild == static_cast< Window* >( m_pTabBar ) ) 321*b1cdbd2cSJim Jagielski { 322*b1cdbd2cSJim Jagielski nIndexInParent = i; 323*b1cdbd2cSJim Jagielski break; 324*b1cdbd2cSJim Jagielski } 325*b1cdbd2cSJim Jagielski } 326*b1cdbd2cSJim Jagielski } 327*b1cdbd2cSJim Jagielski } 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski return nIndexInParent; 330*b1cdbd2cSJim Jagielski } 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 333*b1cdbd2cSJim Jagielski getAccessibleRole()334*b1cdbd2cSJim Jagielski sal_Int16 AccessibleTabBar::getAccessibleRole( ) throw (RuntimeException) 335*b1cdbd2cSJim Jagielski { 336*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 337*b1cdbd2cSJim Jagielski 338*b1cdbd2cSJim Jagielski return AccessibleRole::PANEL; 339*b1cdbd2cSJim Jagielski } 340*b1cdbd2cSJim Jagielski 341*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 342*b1cdbd2cSJim Jagielski getAccessibleDescription()343*b1cdbd2cSJim Jagielski ::rtl::OUString AccessibleTabBar::getAccessibleDescription( ) throw (RuntimeException) 344*b1cdbd2cSJim Jagielski { 345*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 346*b1cdbd2cSJim Jagielski 347*b1cdbd2cSJim Jagielski ::rtl::OUString sDescription; 348*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 349*b1cdbd2cSJim Jagielski sDescription = m_pTabBar->GetAccessibleDescription(); 350*b1cdbd2cSJim Jagielski 351*b1cdbd2cSJim Jagielski return sDescription; 352*b1cdbd2cSJim Jagielski } 353*b1cdbd2cSJim Jagielski 354*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 355*b1cdbd2cSJim Jagielski getAccessibleName()356*b1cdbd2cSJim Jagielski ::rtl::OUString AccessibleTabBar::getAccessibleName( ) throw (RuntimeException) 357*b1cdbd2cSJim Jagielski { 358*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 359*b1cdbd2cSJim Jagielski 360*b1cdbd2cSJim Jagielski ::rtl::OUString sName; 361*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 362*b1cdbd2cSJim Jagielski sName = m_pTabBar->GetAccessibleName(); 363*b1cdbd2cSJim Jagielski 364*b1cdbd2cSJim Jagielski return sName; 365*b1cdbd2cSJim Jagielski } 366*b1cdbd2cSJim Jagielski 367*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 368*b1cdbd2cSJim Jagielski getAccessibleRelationSet()369*b1cdbd2cSJim Jagielski Reference< XAccessibleRelationSet > AccessibleTabBar::getAccessibleRelationSet( ) throw (RuntimeException) 370*b1cdbd2cSJim Jagielski { 371*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 372*b1cdbd2cSJim Jagielski 373*b1cdbd2cSJim Jagielski utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper; 374*b1cdbd2cSJim Jagielski Reference< XAccessibleRelationSet > xSet = pRelationSetHelper; 375*b1cdbd2cSJim Jagielski return xSet; 376*b1cdbd2cSJim Jagielski } 377*b1cdbd2cSJim Jagielski 378*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 379*b1cdbd2cSJim Jagielski getAccessibleStateSet()380*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > AccessibleTabBar::getAccessibleStateSet( ) throw (RuntimeException) 381*b1cdbd2cSJim Jagielski { 382*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 383*b1cdbd2cSJim Jagielski 384*b1cdbd2cSJim Jagielski utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper; 385*b1cdbd2cSJim Jagielski Reference< XAccessibleStateSet > xSet = pStateSetHelper; 386*b1cdbd2cSJim Jagielski 387*b1cdbd2cSJim Jagielski if ( !rBHelper.bDisposed && !rBHelper.bInDispose ) 388*b1cdbd2cSJim Jagielski { 389*b1cdbd2cSJim Jagielski FillAccessibleStateSet( *pStateSetHelper ); 390*b1cdbd2cSJim Jagielski } 391*b1cdbd2cSJim Jagielski else 392*b1cdbd2cSJim Jagielski { 393*b1cdbd2cSJim Jagielski pStateSetHelper->AddState( AccessibleStateType::DEFUNC ); 394*b1cdbd2cSJim Jagielski } 395*b1cdbd2cSJim Jagielski 396*b1cdbd2cSJim Jagielski return xSet; 397*b1cdbd2cSJim Jagielski } 398*b1cdbd2cSJim Jagielski 399*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 400*b1cdbd2cSJim Jagielski getLocale()401*b1cdbd2cSJim Jagielski Locale AccessibleTabBar::getLocale( ) throw (IllegalAccessibleComponentStateException, RuntimeException) 402*b1cdbd2cSJim Jagielski { 403*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 404*b1cdbd2cSJim Jagielski 405*b1cdbd2cSJim Jagielski return Application::GetSettings().GetLocale(); 406*b1cdbd2cSJim Jagielski } 407*b1cdbd2cSJim Jagielski 408*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 409*b1cdbd2cSJim Jagielski // XAccessibleComponent 410*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 411*b1cdbd2cSJim Jagielski getAccessibleAtPoint(const awt::Point & rPoint)412*b1cdbd2cSJim Jagielski Reference< XAccessible > AccessibleTabBar::getAccessibleAtPoint( const awt::Point& rPoint ) throw (RuntimeException) 413*b1cdbd2cSJim Jagielski { 414*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 415*b1cdbd2cSJim Jagielski 416*b1cdbd2cSJim Jagielski Reference< XAccessible > xChild; 417*b1cdbd2cSJim Jagielski for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i ) 418*b1cdbd2cSJim Jagielski { 419*b1cdbd2cSJim Jagielski Reference< XAccessible > xAcc = getAccessibleChild( i ); 420*b1cdbd2cSJim Jagielski if ( xAcc.is() ) 421*b1cdbd2cSJim Jagielski { 422*b1cdbd2cSJim Jagielski Reference< XAccessibleComponent > xComp( xAcc->getAccessibleContext(), UNO_QUERY ); 423*b1cdbd2cSJim Jagielski if ( xComp.is() ) 424*b1cdbd2cSJim Jagielski { 425*b1cdbd2cSJim Jagielski Rectangle aRect = VCLRectangle( xComp->getBounds() ); 426*b1cdbd2cSJim Jagielski Point aPos = VCLPoint( rPoint ); 427*b1cdbd2cSJim Jagielski if ( aRect.IsInside( aPos ) ) 428*b1cdbd2cSJim Jagielski { 429*b1cdbd2cSJim Jagielski xChild = xAcc; 430*b1cdbd2cSJim Jagielski break; 431*b1cdbd2cSJim Jagielski } 432*b1cdbd2cSJim Jagielski } 433*b1cdbd2cSJim Jagielski } 434*b1cdbd2cSJim Jagielski } 435*b1cdbd2cSJim Jagielski 436*b1cdbd2cSJim Jagielski return xChild; 437*b1cdbd2cSJim Jagielski } 438*b1cdbd2cSJim Jagielski 439*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 440*b1cdbd2cSJim Jagielski grabFocus()441*b1cdbd2cSJim Jagielski void AccessibleTabBar::grabFocus( ) throw (RuntimeException) 442*b1cdbd2cSJim Jagielski { 443*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 444*b1cdbd2cSJim Jagielski 445*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 446*b1cdbd2cSJim Jagielski m_pTabBar->GrabFocus(); 447*b1cdbd2cSJim Jagielski } 448*b1cdbd2cSJim Jagielski 449*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 450*b1cdbd2cSJim Jagielski getForeground()451*b1cdbd2cSJim Jagielski sal_Int32 AccessibleTabBar::getForeground( ) throw (RuntimeException) 452*b1cdbd2cSJim Jagielski { 453*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski sal_Int32 nColor = 0; 456*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 457*b1cdbd2cSJim Jagielski { 458*b1cdbd2cSJim Jagielski if ( m_pTabBar->IsControlForeground() ) 459*b1cdbd2cSJim Jagielski nColor = m_pTabBar->GetControlForeground().GetColor(); 460*b1cdbd2cSJim Jagielski else 461*b1cdbd2cSJim Jagielski { 462*b1cdbd2cSJim Jagielski Font aFont; 463*b1cdbd2cSJim Jagielski if ( m_pTabBar->IsControlFont() ) 464*b1cdbd2cSJim Jagielski aFont = m_pTabBar->GetControlFont(); 465*b1cdbd2cSJim Jagielski else 466*b1cdbd2cSJim Jagielski aFont = m_pTabBar->GetFont(); 467*b1cdbd2cSJim Jagielski nColor = aFont.GetColor().GetColor(); 468*b1cdbd2cSJim Jagielski } 469*b1cdbd2cSJim Jagielski } 470*b1cdbd2cSJim Jagielski 471*b1cdbd2cSJim Jagielski return nColor; 472*b1cdbd2cSJim Jagielski } 473*b1cdbd2cSJim Jagielski 474*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 475*b1cdbd2cSJim Jagielski getBackground()476*b1cdbd2cSJim Jagielski sal_Int32 AccessibleTabBar::getBackground( ) throw (RuntimeException) 477*b1cdbd2cSJim Jagielski { 478*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 479*b1cdbd2cSJim Jagielski 480*b1cdbd2cSJim Jagielski sal_Int32 nColor = 0; 481*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 482*b1cdbd2cSJim Jagielski { 483*b1cdbd2cSJim Jagielski if ( m_pTabBar->IsControlBackground() ) 484*b1cdbd2cSJim Jagielski nColor = m_pTabBar->GetControlBackground().GetColor(); 485*b1cdbd2cSJim Jagielski else 486*b1cdbd2cSJim Jagielski nColor = m_pTabBar->GetBackground().GetColor().GetColor(); 487*b1cdbd2cSJim Jagielski } 488*b1cdbd2cSJim Jagielski 489*b1cdbd2cSJim Jagielski return nColor; 490*b1cdbd2cSJim Jagielski } 491*b1cdbd2cSJim Jagielski 492*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 493*b1cdbd2cSJim Jagielski // XAccessibleExtendedComponent 494*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 495*b1cdbd2cSJim Jagielski getFont()496*b1cdbd2cSJim Jagielski Reference< awt::XFont > AccessibleTabBar::getFont( ) throw (RuntimeException) 497*b1cdbd2cSJim Jagielski { 498*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 499*b1cdbd2cSJim Jagielski 500*b1cdbd2cSJim Jagielski Reference< awt::XFont > xFont; 501*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 502*b1cdbd2cSJim Jagielski { 503*b1cdbd2cSJim Jagielski Reference< awt::XDevice > xDev( m_pTabBar->GetComponentInterface(), UNO_QUERY ); 504*b1cdbd2cSJim Jagielski if ( xDev.is() ) 505*b1cdbd2cSJim Jagielski { 506*b1cdbd2cSJim Jagielski Font aFont; 507*b1cdbd2cSJim Jagielski if ( m_pTabBar->IsControlFont() ) 508*b1cdbd2cSJim Jagielski aFont = m_pTabBar->GetControlFont(); 509*b1cdbd2cSJim Jagielski else 510*b1cdbd2cSJim Jagielski aFont = m_pTabBar->GetFont(); 511*b1cdbd2cSJim Jagielski VCLXFont* pVCLXFont = new VCLXFont; 512*b1cdbd2cSJim Jagielski pVCLXFont->Init( *xDev.get(), aFont ); 513*b1cdbd2cSJim Jagielski xFont = pVCLXFont; 514*b1cdbd2cSJim Jagielski } 515*b1cdbd2cSJim Jagielski } 516*b1cdbd2cSJim Jagielski 517*b1cdbd2cSJim Jagielski return xFont; 518*b1cdbd2cSJim Jagielski } 519*b1cdbd2cSJim Jagielski 520*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 521*b1cdbd2cSJim Jagielski getTitledBorderText()522*b1cdbd2cSJim Jagielski ::rtl::OUString AccessibleTabBar::getTitledBorderText( ) throw (RuntimeException) 523*b1cdbd2cSJim Jagielski { 524*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 525*b1cdbd2cSJim Jagielski 526*b1cdbd2cSJim Jagielski ::rtl::OUString sText; 527*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 528*b1cdbd2cSJim Jagielski sText = m_pTabBar->GetText(); 529*b1cdbd2cSJim Jagielski 530*b1cdbd2cSJim Jagielski return sText; 531*b1cdbd2cSJim Jagielski } 532*b1cdbd2cSJim Jagielski 533*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 534*b1cdbd2cSJim Jagielski getToolTipText()535*b1cdbd2cSJim Jagielski ::rtl::OUString AccessibleTabBar::getToolTipText( ) throw (RuntimeException) 536*b1cdbd2cSJim Jagielski { 537*b1cdbd2cSJim Jagielski OExternalLockGuard aGuard( this ); 538*b1cdbd2cSJim Jagielski 539*b1cdbd2cSJim Jagielski ::rtl::OUString sText; 540*b1cdbd2cSJim Jagielski if ( m_pTabBar ) 541*b1cdbd2cSJim Jagielski sText = m_pTabBar->GetQuickHelpText(); 542*b1cdbd2cSJim Jagielski 543*b1cdbd2cSJim Jagielski return sText; 544*b1cdbd2cSJim Jagielski } 545*b1cdbd2cSJim Jagielski 546*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------- 547*b1cdbd2cSJim Jagielski 548*b1cdbd2cSJim Jagielski //......................................................................... 549*b1cdbd2cSJim Jagielski } // namespace accessibility 550*b1cdbd2cSJim Jagielski //......................................................................... 551