1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3*cdf0e10cSrcweir * 4*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 5*cdf0e10cSrcweir * 6*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 7*cdf0e10cSrcweir * 8*cdf0e10cSrcweir * This file is part of OpenOffice.org. 9*cdf0e10cSrcweir * 10*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 11*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 12*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 13*cdf0e10cSrcweir * 14*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 15*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 18*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 19*cdf0e10cSrcweir * 20*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 21*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 22*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 23*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 24*cdf0e10cSrcweir * 25*cdf0e10cSrcweir ************************************************************************/ 26*cdf0e10cSrcweir 27*cdf0e10cSrcweir #include "precompiled_accessibility.hxx" 28*cdf0e10cSrcweir 29*cdf0e10cSrcweir #include "accessibility/extended/AccessibleToolPanelDeckTabBarItem.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir /** === begin UNO includes === **/ 32*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp> 33*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleStateType.hpp> 34*cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp> 35*cdf0e10cSrcweir #include <com/sun/star/lang/DisposedException.hpp> 36*cdf0e10cSrcweir /** === end UNO includes === **/ 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir #include <svtools/toolpanel/toolpaneldeck.hxx> 39*cdf0e10cSrcweir #include <svtools/toolpanel/paneltabbar.hxx> 40*cdf0e10cSrcweir #include <unotools/accessiblestatesethelper.hxx> 41*cdf0e10cSrcweir #include <unotools/accessiblerelationsethelper.hxx> 42*cdf0e10cSrcweir #include <tools/diagnose_ex.h> 43*cdf0e10cSrcweir #include <vcl/svapp.hxx> 44*cdf0e10cSrcweir #include <vos/mutex.hxx> 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir //...................................................................................................................... 47*cdf0e10cSrcweir namespace accessibility 48*cdf0e10cSrcweir { 49*cdf0e10cSrcweir //...................................................................................................................... 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir typedef ::com::sun::star::awt::Rectangle UnoRectangle; 52*cdf0e10cSrcweir typedef ::com::sun::star::awt::Point UnoPoint; 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir /** === begin UNO using === **/ 55*cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 56*cdf0e10cSrcweir using ::com::sun::star::uno::XInterface; 57*cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY; 58*cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY_THROW; 59*cdf0e10cSrcweir using ::com::sun::star::uno::UNO_SET_THROW; 60*cdf0e10cSrcweir using ::com::sun::star::uno::Exception; 61*cdf0e10cSrcweir using ::com::sun::star::uno::RuntimeException; 62*cdf0e10cSrcweir using ::com::sun::star::uno::Any; 63*cdf0e10cSrcweir using ::com::sun::star::uno::makeAny; 64*cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 65*cdf0e10cSrcweir using ::com::sun::star::uno::Type; 66*cdf0e10cSrcweir using ::com::sun::star::accessibility::XAccessible; 67*cdf0e10cSrcweir using ::com::sun::star::lang::DisposedException; 68*cdf0e10cSrcweir using ::com::sun::star::lang::IndexOutOfBoundsException; 69*cdf0e10cSrcweir using ::com::sun::star::accessibility::XAccessibleRelationSet; 70*cdf0e10cSrcweir using ::com::sun::star::accessibility::XAccessibleStateSet; 71*cdf0e10cSrcweir using ::com::sun::star::accessibility::XAccessibleComponent; 72*cdf0e10cSrcweir using ::com::sun::star::accessibility::XAccessibleExtendedComponent; 73*cdf0e10cSrcweir using ::com::sun::star::awt::XFont; 74*cdf0e10cSrcweir /** === end UNO using === **/ 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir namespace AccessibleRole = ::com::sun::star::accessibility::AccessibleRole; 77*cdf0e10cSrcweir namespace AccessibleStateType = ::com::sun::star::accessibility::AccessibleStateType; 78*cdf0e10cSrcweir namespace AccessibleEventId = ::com::sun::star::accessibility::AccessibleEventId; 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir //================================================================================================================== 81*cdf0e10cSrcweir //= AccessibleToolPanelDeckTabBarItem_Impl 82*cdf0e10cSrcweir //================================================================================================================== 83*cdf0e10cSrcweir class AccessibleToolPanelDeckTabBarItem_Impl : public ::svt::IToolPanelDeckListener 84*cdf0e10cSrcweir { 85*cdf0e10cSrcweir public: 86*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem_Impl( 87*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem& i_rAntiImpl, 88*cdf0e10cSrcweir const Reference< XAccessible >& i_rAccessibleParent, 89*cdf0e10cSrcweir ::svt::IToolPanelDeck& i_rPanelDeck, 90*cdf0e10cSrcweir ::svt::PanelTabBar& i_rTabBar, 91*cdf0e10cSrcweir const size_t i_nItemPos 92*cdf0e10cSrcweir ); 93*cdf0e10cSrcweir ~AccessibleToolPanelDeckTabBarItem_Impl(); 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir ::svt::PanelTabBar* getTabBar() const { return m_pTabBar; } 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir // IToolPanelDeckListener 98*cdf0e10cSrcweir virtual void PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition ); 99*cdf0e10cSrcweir virtual void PanelRemoved( const size_t i_nPosition ); 100*cdf0e10cSrcweir virtual void ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive ); 101*cdf0e10cSrcweir virtual void LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter ); 102*cdf0e10cSrcweir virtual void Dying(); 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir public: 105*cdf0e10cSrcweir bool isDisposed() const { return m_pPanelDeck == NULL; } 106*cdf0e10cSrcweir void checkDisposed() const; 107*cdf0e10cSrcweir void dispose(); 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir const Reference< XAccessible >& 110*cdf0e10cSrcweir getAccessibleParent() const { return m_xAccessibleParent; } 111*cdf0e10cSrcweir size_t getItemPos() const { return m_nItemPos; } 112*cdf0e10cSrcweir 113*cdf0e10cSrcweir Reference< XAccessibleComponent > getParentAccessibleComponent() const; 114*cdf0e10cSrcweir ::svt::IToolPanelDeck* getPanelDeck() const { return m_pPanelDeck; } 115*cdf0e10cSrcweir ::rtl::OUString getPanelDisplayName(); 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir private: 118*cdf0e10cSrcweir void impl_notifyBoundRectChanges(); 119*cdf0e10cSrcweir void impl_notifyStateChange( const sal_Int16 i_nLostState, const sal_Int16 i_nGainedState ); 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir private: 122*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem& m_rAntiImpl; 123*cdf0e10cSrcweir Reference< XAccessible > m_xAccessibleParent; 124*cdf0e10cSrcweir ::svt::IToolPanelDeck* m_pPanelDeck; 125*cdf0e10cSrcweir ::svt::PanelTabBar* m_pTabBar; 126*cdf0e10cSrcweir size_t m_nItemPos; 127*cdf0e10cSrcweir }; 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir //================================================================================================================== 130*cdf0e10cSrcweir //= AccessibleToolPanelDeckTabBarItem_Impl 131*cdf0e10cSrcweir //================================================================================================================== 132*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 133*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem_Impl::AccessibleToolPanelDeckTabBarItem_Impl( AccessibleToolPanelDeckTabBarItem& i_rAntiImpl, 134*cdf0e10cSrcweir const Reference< XAccessible >& i_rAccessibleParent, ::svt::IToolPanelDeck& i_rPanelDeck, ::svt::PanelTabBar& i_rTabBar, 135*cdf0e10cSrcweir const size_t i_nItemPos ) 136*cdf0e10cSrcweir :m_rAntiImpl( i_rAntiImpl ) 137*cdf0e10cSrcweir ,m_xAccessibleParent( i_rAccessibleParent ) 138*cdf0e10cSrcweir ,m_pPanelDeck( &i_rPanelDeck ) 139*cdf0e10cSrcweir ,m_pTabBar( &i_rTabBar ) 140*cdf0e10cSrcweir ,m_nItemPos( i_nItemPos ) 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir m_pPanelDeck->AddListener( *this ); 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 146*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem_Impl::~AccessibleToolPanelDeckTabBarItem_Impl() 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 151*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::checkDisposed() const 152*cdf0e10cSrcweir { 153*cdf0e10cSrcweir if ( isDisposed() ) 154*cdf0e10cSrcweir throw DisposedException( ::rtl::OUString(), *&m_rAntiImpl ); 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 158*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::dispose() 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir ENSURE_OR_RETURN_VOID( !isDisposed(), "AccessibleToolPanelDeckTabBarItem_Impl::dispose: disposed twice!" ); 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir m_xAccessibleParent.clear(); 163*cdf0e10cSrcweir m_pPanelDeck->RemoveListener( *this ); 164*cdf0e10cSrcweir m_pPanelDeck = NULL; 165*cdf0e10cSrcweir m_pTabBar = NULL; 166*cdf0e10cSrcweir } 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 169*cdf0e10cSrcweir Reference< XAccessibleComponent > AccessibleToolPanelDeckTabBarItem_Impl::getParentAccessibleComponent() const 170*cdf0e10cSrcweir { 171*cdf0e10cSrcweir Reference< XAccessible > xAccessibleParent( m_rAntiImpl.getAccessibleParent(), UNO_QUERY_THROW ); 172*cdf0e10cSrcweir return Reference< XAccessibleComponent >( xAccessibleParent->getAccessibleContext(), UNO_QUERY ); 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 176*cdf0e10cSrcweir ::rtl::OUString AccessibleToolPanelDeckTabBarItem_Impl::getPanelDisplayName() 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir const ::svt::PToolPanel pPanel( m_pPanelDeck->GetPanel( getItemPos() ) ); 179*cdf0e10cSrcweir if ( pPanel.get() == NULL ) 180*cdf0e10cSrcweir throw DisposedException(); 181*cdf0e10cSrcweir return pPanel->GetDisplayName(); 182*cdf0e10cSrcweir } 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 185*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::impl_notifyBoundRectChanges() 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir m_rAntiImpl.NotifyAccessibleEvent( AccessibleEventId::BOUNDRECT_CHANGED, Any(), Any() ); 188*cdf0e10cSrcweir } 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 191*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::impl_notifyStateChange( const sal_Int16 i_nLostState, const sal_Int16 i_nGainedState ) 192*cdf0e10cSrcweir { 193*cdf0e10cSrcweir m_rAntiImpl.NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, 194*cdf0e10cSrcweir i_nLostState > -1 ? makeAny( i_nLostState ) : Any(), 195*cdf0e10cSrcweir i_nGainedState > -1 ? makeAny( i_nGainedState ) : Any() 196*cdf0e10cSrcweir ); 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 200*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition ) 201*cdf0e10cSrcweir { 202*cdf0e10cSrcweir (void)i_pPanel; 203*cdf0e10cSrcweir if ( i_nPosition <= m_nItemPos ) 204*cdf0e10cSrcweir ++m_nItemPos; 205*cdf0e10cSrcweir impl_notifyBoundRectChanges(); 206*cdf0e10cSrcweir } 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 209*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::PanelRemoved( const size_t i_nPosition ) 210*cdf0e10cSrcweir { 211*cdf0e10cSrcweir if ( i_nPosition == m_nItemPos ) 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir m_rAntiImpl.dispose(); 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir else if ( i_nPosition < m_nItemPos ) 216*cdf0e10cSrcweir { 217*cdf0e10cSrcweir --m_nItemPos; 218*cdf0e10cSrcweir impl_notifyBoundRectChanges(); 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 223*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive ) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir if ( m_nItemPos == i_rOldActive ) 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir impl_notifyStateChange( AccessibleStateType::ACTIVE, -1 ); 228*cdf0e10cSrcweir impl_notifyStateChange( AccessibleStateType::SELECTED, -1 ); 229*cdf0e10cSrcweir } 230*cdf0e10cSrcweir else if ( m_nItemPos == i_rNewActive ) 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir impl_notifyStateChange( -1, AccessibleStateType::ACTIVE ); 233*cdf0e10cSrcweir impl_notifyStateChange( -1, AccessibleStateType::SELECTED ); 234*cdf0e10cSrcweir } 235*cdf0e10cSrcweir } 236*cdf0e10cSrcweir 237*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 238*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter ) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir (void)i_rNewLayouter; 241*cdf0e10cSrcweir // if the tool panel deck has a new layouter, then the old layouter, and thus all items it was 242*cdf0e10cSrcweir // responsible for, died. So do we. 243*cdf0e10cSrcweir dispose(); 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 247*cdf0e10cSrcweir void AccessibleToolPanelDeckTabBarItem_Impl::Dying() 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir // if the tool panel deck is dying, then its layouter dies, so should we. 250*cdf0e10cSrcweir dispose(); 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir //================================================================================================================== 254*cdf0e10cSrcweir //= ItemMethodGuard 255*cdf0e10cSrcweir //================================================================================================================== 256*cdf0e10cSrcweir class ItemMethodGuard 257*cdf0e10cSrcweir { 258*cdf0e10cSrcweir public: 259*cdf0e10cSrcweir ItemMethodGuard( AccessibleToolPanelDeckTabBarItem_Impl& i_rImpl ) 260*cdf0e10cSrcweir :m_aGuard( Application::GetSolarMutex() ) 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir i_rImpl.checkDisposed(); 263*cdf0e10cSrcweir } 264*cdf0e10cSrcweir ~ItemMethodGuard() 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir void clear() 269*cdf0e10cSrcweir { 270*cdf0e10cSrcweir m_aGuard.clear(); 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir private: 274*cdf0e10cSrcweir ::vos::OClearableGuard m_aGuard; 275*cdf0e10cSrcweir }; 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir //================================================================================================================== 278*cdf0e10cSrcweir //= AccessibleToolPanelDeckTabBarItem 279*cdf0e10cSrcweir //================================================================================================================== 280*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 281*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem::AccessibleToolPanelDeckTabBarItem( const Reference< XAccessible >& i_rAccessibleParent, 282*cdf0e10cSrcweir ::svt::IToolPanelDeck& i_rPanelDeck, ::svt::PanelTabBar& i_rTabBar, const size_t i_nItemPos ) 283*cdf0e10cSrcweir :m_pImpl( new AccessibleToolPanelDeckTabBarItem_Impl( *this, i_rAccessibleParent, i_rPanelDeck, i_rTabBar, i_nItemPos ) ) 284*cdf0e10cSrcweir { 285*cdf0e10cSrcweir } 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir //------------------------------------------------------------------------------------------------------------------ 288*cdf0e10cSrcweir AccessibleToolPanelDeckTabBarItem::~AccessibleToolPanelDeckTabBarItem() 289*cdf0e10cSrcweir { 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir //-------------------------------------------------------------------- 293*cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleChildCount( ) throw (RuntimeException) 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir return 0; 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir //-------------------------------------------------------------------- 299*cdf0e10cSrcweir Reference< XAccessible > SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException) 300*cdf0e10cSrcweir { 301*cdf0e10cSrcweir (void)i; 302*cdf0e10cSrcweir throw IndexOutOfBoundsException( ::rtl::OUString(), *this ); 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir //-------------------------------------------------------------------- 306*cdf0e10cSrcweir Reference< XAccessible > SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleParent( ) throw (RuntimeException) 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 309*cdf0e10cSrcweir return m_pImpl->getAccessibleParent(); 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir //-------------------------------------------------------------------- 313*cdf0e10cSrcweir sal_Int16 SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleRole( ) throw (RuntimeException) 314*cdf0e10cSrcweir { 315*cdf0e10cSrcweir return AccessibleRole::PAGE_TAB; 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir //-------------------------------------------------------------------- 319*cdf0e10cSrcweir ::rtl::OUString SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleDescription( ) throw (RuntimeException) 320*cdf0e10cSrcweir { 321*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 322*cdf0e10cSrcweir return m_pImpl->getPanelDisplayName(); 323*cdf0e10cSrcweir } 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir //-------------------------------------------------------------------- 326*cdf0e10cSrcweir ::rtl::OUString SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleName( ) throw (RuntimeException) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 329*cdf0e10cSrcweir return m_pImpl->getPanelDisplayName(); 330*cdf0e10cSrcweir } 331*cdf0e10cSrcweir 332*cdf0e10cSrcweir //-------------------------------------------------------------------- 333*cdf0e10cSrcweir Reference< XAccessibleRelationSet > SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleRelationSet( ) throw (RuntimeException) 334*cdf0e10cSrcweir { 335*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 336*cdf0e10cSrcweir ::utl::AccessibleRelationSetHelper* pRelationSet = new utl::AccessibleRelationSetHelper; 337*cdf0e10cSrcweir return pRelationSet; 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir 340*cdf0e10cSrcweir //-------------------------------------------------------------------- 341*cdf0e10cSrcweir Reference< XAccessibleStateSet > SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleStateSet( ) throw (RuntimeException) 342*cdf0e10cSrcweir { 343*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir ::utl::AccessibleStateSetHelper* pStateSet( new ::utl::AccessibleStateSetHelper ); 346*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::FOCUSABLE ); 347*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::SELECTABLE ); 348*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::ICONIFIED ); 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir if ( m_pImpl->getItemPos() == m_pImpl->getPanelDeck()->GetActivePanel() ) 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::ACTIVE ); 353*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::SELECTED ); 354*cdf0e10cSrcweir } 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir if ( m_pImpl->getItemPos() == m_pImpl->getTabBar()->GetFocusedPanelItem() ) 357*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::FOCUSED ); 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir if ( m_pImpl->getTabBar()->IsEnabled() ) 360*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::ENABLED ); 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir if ( m_pImpl->getTabBar()->IsVisible() ) 363*cdf0e10cSrcweir { 364*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::SHOWING ); 365*cdf0e10cSrcweir pStateSet->AddState( AccessibleStateType::VISIBLE ); 366*cdf0e10cSrcweir } 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir return pStateSet; 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir 372*cdf0e10cSrcweir //-------------------------------------------------------------------- 373*cdf0e10cSrcweir Reference< XAccessible > SAL_CALL AccessibleToolPanelDeckTabBarItem::getAccessibleAtPoint( const UnoPoint& i_rLocation ) throw (RuntimeException) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 376*cdf0e10cSrcweir // we do not have children ... 377*cdf0e10cSrcweir (void)i_rLocation; 378*cdf0e10cSrcweir return NULL; 379*cdf0e10cSrcweir } 380*cdf0e10cSrcweir 381*cdf0e10cSrcweir //-------------------------------------------------------------------- 382*cdf0e10cSrcweir void SAL_CALL AccessibleToolPanelDeckTabBarItem::grabFocus( ) throw (RuntimeException) 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 385*cdf0e10cSrcweir m_pImpl->getTabBar()->FocusPanelItem( m_pImpl->getItemPos() ); 386*cdf0e10cSrcweir } 387*cdf0e10cSrcweir 388*cdf0e10cSrcweir //-------------------------------------------------------------------- 389*cdf0e10cSrcweir ::sal_Int32 SAL_CALL AccessibleToolPanelDeckTabBarItem::getForeground( ) throw (RuntimeException) 390*cdf0e10cSrcweir { 391*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 392*cdf0e10cSrcweir Reference< XAccessibleComponent > xParentComponent( m_pImpl->getParentAccessibleComponent(), UNO_SET_THROW ); 393*cdf0e10cSrcweir return xParentComponent->getForeground(); 394*cdf0e10cSrcweir } 395*cdf0e10cSrcweir 396*cdf0e10cSrcweir //-------------------------------------------------------------------- 397*cdf0e10cSrcweir ::sal_Int32 SAL_CALL AccessibleToolPanelDeckTabBarItem::getBackground( ) throw (RuntimeException) 398*cdf0e10cSrcweir { 399*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 400*cdf0e10cSrcweir Reference< XAccessibleComponent > xParentComponent( m_pImpl->getParentAccessibleComponent(), UNO_SET_THROW ); 401*cdf0e10cSrcweir return xParentComponent->getBackground(); 402*cdf0e10cSrcweir } 403*cdf0e10cSrcweir 404*cdf0e10cSrcweir //-------------------------------------------------------------------- 405*cdf0e10cSrcweir Reference< XFont > SAL_CALL AccessibleToolPanelDeckTabBarItem::getFont( ) throw (RuntimeException) 406*cdf0e10cSrcweir { 407*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 408*cdf0e10cSrcweir Reference< XAccessibleExtendedComponent > xParentComponent( m_pImpl->getParentAccessibleComponent(), UNO_QUERY_THROW ); 409*cdf0e10cSrcweir // TODO: strictly, this is not correct: The TabBar implementation of the TabLayouter might use 410*cdf0e10cSrcweir // a different font ... 411*cdf0e10cSrcweir return xParentComponent->getFont(); 412*cdf0e10cSrcweir } 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir //-------------------------------------------------------------------- 415*cdf0e10cSrcweir ::rtl::OUString SAL_CALL AccessibleToolPanelDeckTabBarItem::getTitledBorderText( ) throw (RuntimeException) 416*cdf0e10cSrcweir { 417*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 418*cdf0e10cSrcweir // no support 419*cdf0e10cSrcweir return ::rtl::OUString(); 420*cdf0e10cSrcweir } 421*cdf0e10cSrcweir 422*cdf0e10cSrcweir //-------------------------------------------------------------------- 423*cdf0e10cSrcweir ::rtl::OUString SAL_CALL AccessibleToolPanelDeckTabBarItem::getToolTipText( ) throw (RuntimeException) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 426*cdf0e10cSrcweir return m_pImpl->getPanelDisplayName(); 427*cdf0e10cSrcweir } 428*cdf0e10cSrcweir 429*cdf0e10cSrcweir //-------------------------------------------------------------------- 430*cdf0e10cSrcweir UnoRectangle SAL_CALL AccessibleToolPanelDeckTabBarItem::implGetBounds() throw (RuntimeException) 431*cdf0e10cSrcweir { 432*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 433*cdf0e10cSrcweir 434*cdf0e10cSrcweir const ::Rectangle aItemScreenRect( m_pImpl->getTabBar()->GetItemScreenRect( m_pImpl->getItemPos() ) ); 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir Reference< XAccessibleComponent > xParentComponent( m_pImpl->getParentAccessibleComponent(), UNO_SET_THROW ); 437*cdf0e10cSrcweir const UnoPoint aParentLocation( xParentComponent->getLocationOnScreen() ); 438*cdf0e10cSrcweir return UnoRectangle( 439*cdf0e10cSrcweir aItemScreenRect.Left() - aParentLocation.X, 440*cdf0e10cSrcweir aItemScreenRect.Top() - aParentLocation.Y, 441*cdf0e10cSrcweir aItemScreenRect.GetWidth(), 442*cdf0e10cSrcweir aItemScreenRect.GetHeight() 443*cdf0e10cSrcweir ); 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir //-------------------------------------------------------------------- 447*cdf0e10cSrcweir void SAL_CALL AccessibleToolPanelDeckTabBarItem::disposing() 448*cdf0e10cSrcweir { 449*cdf0e10cSrcweir ItemMethodGuard aGuard( *m_pImpl ); 450*cdf0e10cSrcweir m_pImpl->dispose(); 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir //...................................................................................................................... 454*cdf0e10cSrcweir } // namespace accessibility 455*cdf0e10cSrcweir //...................................................................................................................... 456