1*d3553c6bSHerbert Dürr /************************************************************** 22bfcd321SSteve Yin * 3*d3553c6bSHerbert Dürr * Licensed to the Apache Software Foundation (ASF) under one 4*d3553c6bSHerbert Dürr * or more contributor license agreements. See the NOTICE file 5*d3553c6bSHerbert Dürr * distributed with this work for additional information 6*d3553c6bSHerbert Dürr * regarding copyright ownership. The ASF licenses this file 7*d3553c6bSHerbert Dürr * to you under the Apache License, Version 2.0 (the 8*d3553c6bSHerbert Dürr * "License"); you may not use this file except in compliance 9*d3553c6bSHerbert Dürr * with the License. You may obtain a copy of the License at 102bfcd321SSteve Yin * 11*d3553c6bSHerbert Dürr * http://www.apache.org/licenses/LICENSE-2.0 122bfcd321SSteve Yin * 13*d3553c6bSHerbert Dürr * Unless required by applicable law or agreed to in writing, 14*d3553c6bSHerbert Dürr * software distributed under the License is distributed on an 15*d3553c6bSHerbert Dürr * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*d3553c6bSHerbert Dürr * KIND, either express or implied. See the License for the 17*d3553c6bSHerbert Dürr * specific language governing permissions and limitations 18*d3553c6bSHerbert Dürr * under the License. 192bfcd321SSteve Yin * 20*d3553c6bSHerbert Dürr *************************************************************/ 212bfcd321SSteve Yin 222bfcd321SSteve Yin // MARKER(update_precomp.py): autogen include statement, do not remove 232bfcd321SSteve Yin #include "precompiled_svtools.hxx" 242bfcd321SSteve Yin 252bfcd321SSteve Yin #ifndef _SVTRULERACCESSIBLE_HXX 262bfcd321SSteve Yin #include <svtools/accessibleruler.hxx> 272bfcd321SSteve Yin #endif 280deba7fbSSteve Yin 292bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_ 302bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleRole.hpp> 312bfcd321SSteve Yin #endif 322bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_ 332bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleEventId.hpp> 342bfcd321SSteve Yin #endif 352bfcd321SSteve Yin #ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_ 362bfcd321SSteve Yin #include <unotools/accessiblestatesethelper.hxx> 372bfcd321SSteve Yin #endif 382bfcd321SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_ 392bfcd321SSteve Yin #include <com/sun/star/accessibility/AccessibleStateType.hpp> 402bfcd321SSteve Yin #endif 412bfcd321SSteve Yin 422bfcd321SSteve Yin #ifndef _COM_SUN_STAR_BEANS_PROPERTYCHANGEEVENT_HPP_ 432bfcd321SSteve Yin #include <com/sun/star/beans/PropertyChangeEvent.hpp> 442bfcd321SSteve Yin #endif 452bfcd321SSteve Yin 462bfcd321SSteve Yin #ifndef _COM_SUN_STAR_AWT_XWINDOW_HPP_ 472bfcd321SSteve Yin #include <com/sun/star/awt/XWindow.hpp> 482bfcd321SSteve Yin #endif 492bfcd321SSteve Yin 502bfcd321SSteve Yin #ifndef _CPPUHELPER_TYPEPROVIDER_HXX_ 512bfcd321SSteve Yin #include <cppuhelper/typeprovider.hxx> 522bfcd321SSteve Yin #endif 532bfcd321SSteve Yin 542bfcd321SSteve Yin #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ 552bfcd321SSteve Yin #include <toolkit/helper/vclunohelper.hxx> 562bfcd321SSteve Yin #endif 572bfcd321SSteve Yin #ifndef _TOOLKIT_HELPER_CONVERT_HXX_ 582bfcd321SSteve Yin #include <toolkit/helper/convert.hxx> 592bfcd321SSteve Yin #endif 602bfcd321SSteve Yin 612bfcd321SSteve Yin #ifndef _SV_SVAPP_HXX 622bfcd321SSteve Yin #include <vcl/svapp.hxx> 632bfcd321SSteve Yin #endif 642bfcd321SSteve Yin 652bfcd321SSteve Yin #ifndef _OSL_MUTEX_HXX_ 662bfcd321SSteve Yin #include <osl/mutex.hxx> 672bfcd321SSteve Yin #endif 682bfcd321SSteve Yin #ifndef _RTL_UUID_H_ 692bfcd321SSteve Yin #include <rtl/uuid.h> 702bfcd321SSteve Yin #endif 712bfcd321SSteve Yin #ifndef _TOOLS_DEBUG_HXX 722bfcd321SSteve Yin #include <tools/debug.hxx> 732bfcd321SSteve Yin #endif 742bfcd321SSteve Yin #ifndef _SV_GEN_HXX 752bfcd321SSteve Yin #include <tools/gen.hxx> 762bfcd321SSteve Yin #endif 772bfcd321SSteve Yin 782bfcd321SSteve Yin #include "ruler.hxx" 792bfcd321SSteve Yin 802bfcd321SSteve Yin #ifndef COMPHELPER_ACCESSIBLE_EVENT_NOTIFIER 812bfcd321SSteve Yin #include <comphelper/accessibleeventnotifier.hxx> 822bfcd321SSteve Yin #endif 832bfcd321SSteve Yin 842bfcd321SSteve Yin using namespace ::cppu; 852bfcd321SSteve Yin using namespace ::osl; 862bfcd321SSteve Yin using namespace ::rtl; 872bfcd321SSteve Yin using namespace ::com::sun::star; 882bfcd321SSteve Yin using namespace ::com::sun::star::uno; 892bfcd321SSteve Yin using namespace ::com::sun::star::accessibility; 902bfcd321SSteve Yin 912bfcd321SSteve Yin DBG_NAME( SvtRulerAccessible ) 922bfcd321SSteve Yin 932bfcd321SSteve Yin 942bfcd321SSteve Yin //===== internal ============================================================ 952bfcd321SSteve Yin 962bfcd321SSteve Yin SvtRulerAccessible::SvtRulerAccessible( 972bfcd321SSteve Yin const uno::Reference< XAccessible >& rxParent, Ruler& rRepr, const OUString& rName ) : 982bfcd321SSteve Yin 992bfcd321SSteve Yin SvtRulerAccessible_Base( m_aMutex ), 1002bfcd321SSteve Yin msName( rName ), 1012bfcd321SSteve Yin mxParent( rxParent ), 1022bfcd321SSteve Yin mpRepr( &rRepr ), 1032bfcd321SSteve Yin mnClientId( 0 ) 1042bfcd321SSteve Yin { 1052bfcd321SSteve Yin DBG_CTOR( SvtRulerAccessible, NULL ); 1062bfcd321SSteve Yin } 1072bfcd321SSteve Yin 1082bfcd321SSteve Yin SvtRulerAccessible::~SvtRulerAccessible() 1092bfcd321SSteve Yin { 1102bfcd321SSteve Yin DBG_DTOR( SvtRulerAccessible, NULL ); 1112bfcd321SSteve Yin 1122bfcd321SSteve Yin if( IsAlive() ) 1132bfcd321SSteve Yin { 1142bfcd321SSteve Yin osl_incrementInterlockedCount( &m_refCount ); 1152bfcd321SSteve Yin dispose(); // set mpRepr = NULL & release all childs 1162bfcd321SSteve Yin } 1172bfcd321SSteve Yin } 1182bfcd321SSteve Yin 1192bfcd321SSteve Yin //===== XAccessible ========================================================= 1202bfcd321SSteve Yin 1212bfcd321SSteve Yin uno::Reference< XAccessibleContext > SAL_CALL SvtRulerAccessible::getAccessibleContext( void ) throw( RuntimeException ) 1222bfcd321SSteve Yin { 1232bfcd321SSteve Yin return this; 1242bfcd321SSteve Yin } 1252bfcd321SSteve Yin 1262bfcd321SSteve Yin //===== XAccessibleComponent ================================================ 1272bfcd321SSteve Yin 1282bfcd321SSteve Yin sal_Bool SAL_CALL SvtRulerAccessible::containsPoint( const awt::Point& rPoint ) throw( RuntimeException ) 1292bfcd321SSteve Yin { 1302bfcd321SSteve Yin // no guard -> done in getBounds() 1312bfcd321SSteve Yin // return GetBoundingBox().IsInside( VCLPoint( rPoint ) ); 1322bfcd321SSteve Yin return Rectangle( Point( 0, 0 ), GetBoundingBox().GetSize() ).IsInside( VCLPoint( rPoint ) ); 1332bfcd321SSteve Yin } 1342bfcd321SSteve Yin 1352bfcd321SSteve Yin uno::Reference< XAccessible > SAL_CALL SvtRulerAccessible::getAccessibleAtPoint( const awt::Point& ) throw( RuntimeException ) 1362bfcd321SSteve Yin { 1372bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 1382bfcd321SSteve Yin 1392bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 1402bfcd321SSteve Yin 1412bfcd321SSteve Yin uno::Reference< XAccessible > xRet; 1422bfcd321SSteve Yin 1432bfcd321SSteve Yin 1442bfcd321SSteve Yin return xRet; 1452bfcd321SSteve Yin } 1462bfcd321SSteve Yin 1472bfcd321SSteve Yin awt::Rectangle SAL_CALL SvtRulerAccessible::getBounds() throw( RuntimeException ) 1482bfcd321SSteve Yin { 1492bfcd321SSteve Yin // no guard -> done in GetBoundingBox() 1502bfcd321SSteve Yin return AWTRectangle( GetBoundingBox() ); 1512bfcd321SSteve Yin } 1522bfcd321SSteve Yin 1532bfcd321SSteve Yin awt::Point SAL_CALL SvtRulerAccessible::getLocation() throw( RuntimeException ) 1542bfcd321SSteve Yin { 1552bfcd321SSteve Yin // no guard -> done in GetBoundingBox() 1562bfcd321SSteve Yin return AWTPoint( GetBoundingBox().TopLeft() ); 1572bfcd321SSteve Yin } 1582bfcd321SSteve Yin 1592bfcd321SSteve Yin awt::Point SAL_CALL SvtRulerAccessible::getLocationOnScreen() throw( RuntimeException ) 1602bfcd321SSteve Yin { 1612bfcd321SSteve Yin // no guard -> done in GetBoundingBoxOnScreen() 1622bfcd321SSteve Yin return AWTPoint( GetBoundingBoxOnScreen().TopLeft() ); 1632bfcd321SSteve Yin } 1642bfcd321SSteve Yin 1652bfcd321SSteve Yin awt::Size SAL_CALL SvtRulerAccessible::getSize() throw( RuntimeException ) 1662bfcd321SSteve Yin { 1672bfcd321SSteve Yin // no guard -> done in GetBoundingBox() 1682bfcd321SSteve Yin return AWTSize( GetBoundingBox().GetSize() ); 1692bfcd321SSteve Yin } 1702bfcd321SSteve Yin 1712bfcd321SSteve Yin sal_Bool SAL_CALL SvtRulerAccessible::isShowing() throw( RuntimeException ) 1722bfcd321SSteve Yin { 1732bfcd321SSteve Yin return sal_True; 1742bfcd321SSteve Yin } 1752bfcd321SSteve Yin 1762bfcd321SSteve Yin sal_Bool SAL_CALL SvtRulerAccessible::isVisible() throw( RuntimeException ) 1772bfcd321SSteve Yin { 1782bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 1792bfcd321SSteve Yin 1802bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 1812bfcd321SSteve Yin 1822bfcd321SSteve Yin return mpRepr->IsVisible(); 1832bfcd321SSteve Yin } 1842bfcd321SSteve Yin 1852bfcd321SSteve Yin sal_Bool SAL_CALL SvtRulerAccessible::isFocusTraversable() throw( RuntimeException ) 1862bfcd321SSteve Yin { 1872bfcd321SSteve Yin return sal_True; 1882bfcd321SSteve Yin } 1892bfcd321SSteve Yin 1902bfcd321SSteve Yin //===== XAccessibleContext ================================================== 1912bfcd321SSteve Yin 1922bfcd321SSteve Yin sal_Int32 SAL_CALL SvtRulerAccessible::getAccessibleChildCount( void ) throw( RuntimeException ) 1932bfcd321SSteve Yin { 1942bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 1952bfcd321SSteve Yin 1962bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 1972bfcd321SSteve Yin 1982bfcd321SSteve Yin return 0; 1992bfcd321SSteve Yin } 2002bfcd321SSteve Yin 2012bfcd321SSteve Yin uno::Reference< XAccessible > SAL_CALL SvtRulerAccessible::getAccessibleChild( sal_Int32 ) 2022bfcd321SSteve Yin throw( RuntimeException, lang::IndexOutOfBoundsException ) 2032bfcd321SSteve Yin { 2042bfcd321SSteve Yin uno::Reference< XAccessible > xChild ; 2052bfcd321SSteve Yin 2062bfcd321SSteve Yin return xChild; 2072bfcd321SSteve Yin } 2082bfcd321SSteve Yin 2092bfcd321SSteve Yin uno::Reference< XAccessible > SAL_CALL SvtRulerAccessible::getAccessibleParent( void ) throw( RuntimeException ) 2102bfcd321SSteve Yin { 2112bfcd321SSteve Yin return mxParent; 2122bfcd321SSteve Yin } 2132bfcd321SSteve Yin 2142bfcd321SSteve Yin sal_Int32 SAL_CALL SvtRulerAccessible::getAccessibleIndexInParent( void ) throw( RuntimeException ) 2152bfcd321SSteve Yin { 2162bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 2172bfcd321SSteve Yin // Use a simple but slow solution for now. Optimize later. 2182bfcd321SSteve Yin 2192bfcd321SSteve Yin // Iterate over all the parent's children and search for this object. 2202bfcd321SSteve Yin if( mxParent.is() ) 2212bfcd321SSteve Yin { 2222bfcd321SSteve Yin uno::Reference< XAccessibleContext > xParentContext( mxParent->getAccessibleContext() ); 2232bfcd321SSteve Yin if( xParentContext.is() ) 2242bfcd321SSteve Yin { 2252bfcd321SSteve Yin sal_Int32 nChildCount = xParentContext->getAccessibleChildCount(); 2262bfcd321SSteve Yin for( sal_Int32 i = 0 ; i < nChildCount ; ++i ) 2272bfcd321SSteve Yin { 2282bfcd321SSteve Yin uno::Reference< XAccessible > xChild( xParentContext->getAccessibleChild( i ) ); 2292bfcd321SSteve Yin if( xChild.get() == ( XAccessible* ) this ) 2302bfcd321SSteve Yin return i; 2312bfcd321SSteve Yin } 2322bfcd321SSteve Yin } 2332bfcd321SSteve Yin } 2342bfcd321SSteve Yin 2352bfcd321SSteve Yin // Return -1 to indicate that this object's parent does not know about the 2362bfcd321SSteve Yin // object. 2372bfcd321SSteve Yin return -1; 2382bfcd321SSteve Yin } 2392bfcd321SSteve Yin 2402bfcd321SSteve Yin sal_Int16 SAL_CALL SvtRulerAccessible::getAccessibleRole( void ) throw( RuntimeException ) 2412bfcd321SSteve Yin { 2422bfcd321SSteve Yin return AccessibleRole::RULER; 2432bfcd321SSteve Yin } 2442bfcd321SSteve Yin 2452bfcd321SSteve Yin OUString SAL_CALL SvtRulerAccessible::getAccessibleDescription( void ) throw( RuntimeException ) 2462bfcd321SSteve Yin { 2472bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 2482bfcd321SSteve Yin return msDescription; 2492bfcd321SSteve Yin } 2502bfcd321SSteve Yin 2512bfcd321SSteve Yin OUString SAL_CALL SvtRulerAccessible::getAccessibleName( void ) throw( RuntimeException ) 2522bfcd321SSteve Yin { 2532bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 2542bfcd321SSteve Yin return msName; 2552bfcd321SSteve Yin } 2562bfcd321SSteve Yin 2572bfcd321SSteve Yin /** Return empty uno::Reference to indicate that the relation set is not 2582bfcd321SSteve Yin supported. 2592bfcd321SSteve Yin */ 2602bfcd321SSteve Yin uno::Reference< XAccessibleRelationSet > SAL_CALL SvtRulerAccessible::getAccessibleRelationSet( void ) throw( RuntimeException ) 2612bfcd321SSteve Yin { 2622bfcd321SSteve Yin return uno::Reference< XAccessibleRelationSet >(); 2632bfcd321SSteve Yin } 2642bfcd321SSteve Yin 2652bfcd321SSteve Yin 2662bfcd321SSteve Yin uno::Reference< XAccessibleStateSet > SAL_CALL SvtRulerAccessible::getAccessibleStateSet( void ) throw( RuntimeException ) 2672bfcd321SSteve Yin { 2682bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 2692bfcd321SSteve Yin utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper; 2702bfcd321SSteve Yin 2712bfcd321SSteve Yin if( IsAlive() ) 2722bfcd321SSteve Yin { 2732bfcd321SSteve Yin pStateSetHelper->AddState( AccessibleStateType::ENABLED ); 2742bfcd321SSteve Yin 2752bfcd321SSteve Yin if( isShowing() ) 2762bfcd321SSteve Yin pStateSetHelper->AddState( AccessibleStateType::SHOWING ); 2772bfcd321SSteve Yin 2782bfcd321SSteve Yin if( isVisible() ) 2792bfcd321SSteve Yin pStateSetHelper->AddState( AccessibleStateType::VISIBLE ); 2802bfcd321SSteve Yin 2812bfcd321SSteve Yin 2822bfcd321SSteve Yin if ( mpRepr ) 2832bfcd321SSteve Yin { 2842bfcd321SSteve Yin if ( mpRepr->GetStyle() & WB_HORZ ) 2852bfcd321SSteve Yin pStateSetHelper->AddState( AccessibleStateType::HORIZONTAL ); 2862bfcd321SSteve Yin else 2872bfcd321SSteve Yin pStateSetHelper->AddState( AccessibleStateType::VERTICAL ); 2882bfcd321SSteve Yin } 2892bfcd321SSteve Yin if(pStateSetHelper->contains(AccessibleStateType::FOCUSABLE)) 2902bfcd321SSteve Yin { 2912bfcd321SSteve Yin pStateSetHelper->RemoveState( AccessibleStateType::FOCUSABLE ); 2922bfcd321SSteve Yin } 2932bfcd321SSteve Yin 2942bfcd321SSteve Yin } 2952bfcd321SSteve Yin 2962bfcd321SSteve Yin 2972bfcd321SSteve Yin return pStateSetHelper; 2982bfcd321SSteve Yin } 2992bfcd321SSteve Yin 3002bfcd321SSteve Yin lang::Locale SAL_CALL SvtRulerAccessible::getLocale( void ) throw( IllegalAccessibleComponentStateException, RuntimeException ) 3012bfcd321SSteve Yin { 3022bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3032bfcd321SSteve Yin if( mxParent.is() ) 3042bfcd321SSteve Yin { 3052bfcd321SSteve Yin uno::Reference< XAccessibleContext > xParentContext( mxParent->getAccessibleContext() ); 3062bfcd321SSteve Yin if( xParentContext.is() ) 3072bfcd321SSteve Yin return xParentContext->getLocale(); 3082bfcd321SSteve Yin } 3092bfcd321SSteve Yin 3102bfcd321SSteve Yin // No parent. Therefore throw exception to indicate this cluelessness. 3112bfcd321SSteve Yin throw IllegalAccessibleComponentStateException(); 3122bfcd321SSteve Yin } 3132bfcd321SSteve Yin 3142bfcd321SSteve Yin void SAL_CALL SvtRulerAccessible::addEventListener( const uno::Reference< XAccessibleEventListener >& xListener ) 3152bfcd321SSteve Yin throw( RuntimeException ) 3162bfcd321SSteve Yin { 3172bfcd321SSteve Yin if (xListener.is()) 3182bfcd321SSteve Yin { 3192bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3202bfcd321SSteve Yin if (!mnClientId) 3212bfcd321SSteve Yin mnClientId = comphelper::AccessibleEventNotifier::registerClient( ); 3222bfcd321SSteve Yin comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener ); 3232bfcd321SSteve Yin } 3242bfcd321SSteve Yin } 3252bfcd321SSteve Yin 3262bfcd321SSteve Yin void SAL_CALL SvtRulerAccessible::removeEventListener( const uno::Reference< XAccessibleEventListener >& xListener ) 3272bfcd321SSteve Yin throw( RuntimeException ) 3282bfcd321SSteve Yin { 3292bfcd321SSteve Yin if (xListener.is()) 3302bfcd321SSteve Yin { 3312bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3322bfcd321SSteve Yin 3332bfcd321SSteve Yin sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener ); 3342bfcd321SSteve Yin if ( !nListenerCount ) 3352bfcd321SSteve Yin { 3362bfcd321SSteve Yin // no listeners anymore 3372bfcd321SSteve Yin // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client), 3382bfcd321SSteve Yin // and at least to us not firing any events anymore, in case somebody calls 3392bfcd321SSteve Yin // NotifyAccessibleEvent, again 3402bfcd321SSteve Yin comphelper::AccessibleEventNotifier::revokeClient( mnClientId ); 3412bfcd321SSteve Yin mnClientId = 0; 3422bfcd321SSteve Yin } 3432bfcd321SSteve Yin } 3442bfcd321SSteve Yin } 3452bfcd321SSteve Yin 3462bfcd321SSteve Yin void SAL_CALL SvtRulerAccessible::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener ) 3472bfcd321SSteve Yin throw( RuntimeException ) 3482bfcd321SSteve Yin { 3492bfcd321SSteve Yin if( xListener.is() ) 3502bfcd321SSteve Yin { 3512bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3522bfcd321SSteve Yin 3532bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 3542bfcd321SSteve Yin 3552bfcd321SSteve Yin uno::Reference< awt::XWindow > xWindow = VCLUnoHelper::GetInterface( mpRepr ); 3562bfcd321SSteve Yin if( xWindow.is() ) 3572bfcd321SSteve Yin xWindow->addFocusListener( xListener ); 3582bfcd321SSteve Yin } 3592bfcd321SSteve Yin } 3602bfcd321SSteve Yin 3612bfcd321SSteve Yin void SAL_CALL SvtRulerAccessible::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener ) 3622bfcd321SSteve Yin throw (RuntimeException) 3632bfcd321SSteve Yin { 3642bfcd321SSteve Yin if( xListener.is() ) 3652bfcd321SSteve Yin { 3662bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3672bfcd321SSteve Yin 3682bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 3692bfcd321SSteve Yin 3702bfcd321SSteve Yin uno::Reference< awt::XWindow > xWindow = VCLUnoHelper::GetInterface( mpRepr ); 3712bfcd321SSteve Yin if( xWindow.is() ) 3722bfcd321SSteve Yin xWindow->removeFocusListener( xListener ); 3732bfcd321SSteve Yin } 3742bfcd321SSteve Yin } 3752bfcd321SSteve Yin 3762bfcd321SSteve Yin void SAL_CALL SvtRulerAccessible::grabFocus() throw( RuntimeException ) 3772bfcd321SSteve Yin { 3782bfcd321SSteve Yin ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3792bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3802bfcd321SSteve Yin 3812bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 3822bfcd321SSteve Yin 3832bfcd321SSteve Yin mpRepr->GrabFocus(); 3842bfcd321SSteve Yin } 3852bfcd321SSteve Yin 3862bfcd321SSteve Yin Any SAL_CALL SvtRulerAccessible::getAccessibleKeyBinding() throw( RuntimeException ) 3872bfcd321SSteve Yin { 3882bfcd321SSteve Yin // here is no implementation, because here are no KeyBindings for every object 3892bfcd321SSteve Yin return Any(); 3902bfcd321SSteve Yin } 3912bfcd321SSteve Yin 3922bfcd321SSteve Yin sal_Int32 SvtRulerAccessible::getForeground( ) 3932bfcd321SSteve Yin throw (::com::sun::star::uno::RuntimeException) 3942bfcd321SSteve Yin { 3952bfcd321SSteve Yin ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 3962bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 3972bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 3982bfcd321SSteve Yin 3992bfcd321SSteve Yin return mpRepr->GetControlForeground().GetColor(); 4002bfcd321SSteve Yin } 4012bfcd321SSteve Yin sal_Int32 SvtRulerAccessible::getBackground( ) 4022bfcd321SSteve Yin throw (::com::sun::star::uno::RuntimeException) 4032bfcd321SSteve Yin { 4042bfcd321SSteve Yin ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 4052bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 4062bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 4072bfcd321SSteve Yin 4082bfcd321SSteve Yin return mpRepr->GetControlBackground().GetColor(); 4092bfcd321SSteve Yin } 4102bfcd321SSteve Yin 4112bfcd321SSteve Yin //===== XServiceInfo ======================================================== 4122bfcd321SSteve Yin 4132bfcd321SSteve Yin OUString SAL_CALL SvtRulerAccessible::getImplementationName( void ) throw( RuntimeException ) 4142bfcd321SSteve Yin { 4152bfcd321SSteve Yin return OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.ui.SvtRulerAccessible" ) ); 4162bfcd321SSteve Yin } 4172bfcd321SSteve Yin 4182bfcd321SSteve Yin sal_Bool SAL_CALL SvtRulerAccessible::supportsService( const OUString& sServiceName ) throw( RuntimeException ) 4192bfcd321SSteve Yin { 4202bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 4212bfcd321SSteve Yin // Iterate over all supported service names and return true if on of them 4222bfcd321SSteve Yin // matches the given name. 4232bfcd321SSteve Yin Sequence< OUString > aSupportedServices( getSupportedServiceNames() ); 4242bfcd321SSteve Yin int nLength = aSupportedServices.getLength(); 4252bfcd321SSteve Yin const OUString* pStr = aSupportedServices.getConstArray(); 4262bfcd321SSteve Yin 4272bfcd321SSteve Yin for( int i = nLength ; i ; --i, ++pStr ) 4282bfcd321SSteve Yin { 4292bfcd321SSteve Yin if( sServiceName == *pStr ) 4302bfcd321SSteve Yin return sal_True; 4312bfcd321SSteve Yin } 4322bfcd321SSteve Yin 4332bfcd321SSteve Yin return sal_False; 4342bfcd321SSteve Yin } 4352bfcd321SSteve Yin 4362bfcd321SSteve Yin Sequence< OUString > SAL_CALL SvtRulerAccessible::getSupportedServiceNames( void ) throw( RuntimeException ) 4372bfcd321SSteve Yin { 4382bfcd321SSteve Yin const OUString sServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.accessibility.AccessibleContext" ) ); 4392bfcd321SSteve Yin return Sequence< OUString >( &sServiceName, 1 ); 4402bfcd321SSteve Yin } 4412bfcd321SSteve Yin 4422bfcd321SSteve Yin //===== XTypeProvider ======================================================= 4432bfcd321SSteve Yin 4442bfcd321SSteve Yin Sequence< sal_Int8 > SAL_CALL SvtRulerAccessible::getImplementationId( void ) throw( RuntimeException ) 4452bfcd321SSteve Yin { 4462bfcd321SSteve Yin return getUniqueId(); 4472bfcd321SSteve Yin } 4482bfcd321SSteve Yin 4492bfcd321SSteve Yin 4502bfcd321SSteve Yin //===== internals ======================================================== 4512bfcd321SSteve Yin 4522bfcd321SSteve Yin void SvtRulerAccessible::setName( const OUString& rName ) 4532bfcd321SSteve Yin { 4542bfcd321SSteve Yin msName = rName; 4552bfcd321SSteve Yin 4562bfcd321SSteve Yin } 4572bfcd321SSteve Yin 4582bfcd321SSteve Yin void SvtRulerAccessible::setDescription( const OUString& rDescr ) 4592bfcd321SSteve Yin { 4602bfcd321SSteve Yin 4612bfcd321SSteve Yin msDescription = rDescr; 4622bfcd321SSteve Yin 4632bfcd321SSteve Yin } 4642bfcd321SSteve Yin 4652bfcd321SSteve Yin 4662bfcd321SSteve Yin 4672bfcd321SSteve Yin void SAL_CALL SvtRulerAccessible::disposing() 4682bfcd321SSteve Yin { 4692bfcd321SSteve Yin if( !rBHelper.bDisposed ) 4702bfcd321SSteve Yin { 4712bfcd321SSteve Yin { 4722bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 4732bfcd321SSteve Yin mpRepr = NULL; // object dies with representation 4742bfcd321SSteve Yin 4752bfcd321SSteve Yin } 4762bfcd321SSteve Yin 4772bfcd321SSteve Yin { 4782bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 4792bfcd321SSteve Yin 4802bfcd321SSteve Yin // Send a disposing to all listeners. 4812bfcd321SSteve Yin if ( mnClientId ) 4822bfcd321SSteve Yin { 4832bfcd321SSteve Yin comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this ); 4842bfcd321SSteve Yin mnClientId = 0; 4852bfcd321SSteve Yin } 4862bfcd321SSteve Yin mxParent = uno::Reference< XAccessible >(); 4872bfcd321SSteve Yin } 4882bfcd321SSteve Yin } 4892bfcd321SSteve Yin } 4902bfcd321SSteve Yin 4912bfcd321SSteve Yin Rectangle SvtRulerAccessible::GetBoundingBoxOnScreen( void ) throw( RuntimeException ) 4922bfcd321SSteve Yin { 4932bfcd321SSteve Yin ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 4942bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 4952bfcd321SSteve Yin 4962bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 4972bfcd321SSteve Yin //IAccessibility2 Implementation 2009----- 4980deba7fbSSteve Yin //the absolute on screen pixel is wrong 4992bfcd321SSteve Yin //return Rectangle( mpRepr->GetParent()->OutputToScreenPixel( mpRepr->GetPosPixel() ), mpRepr->GetSizePixel() ); 5002bfcd321SSteve Yin return Rectangle( mpRepr->GetParent()->OutputToAbsoluteScreenPixel( mpRepr->GetPosPixel() ), mpRepr->GetSizePixel() ); 5012bfcd321SSteve Yin //-----IAccessibility2 Implementation 2009 5022bfcd321SSteve Yin } 5032bfcd321SSteve Yin 5042bfcd321SSteve Yin Rectangle SvtRulerAccessible::GetBoundingBox( void ) throw( RuntimeException ) 5052bfcd321SSteve Yin { 5062bfcd321SSteve Yin ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); 5072bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex ); 5082bfcd321SSteve Yin 5092bfcd321SSteve Yin ThrowExceptionIfNotAlive(); 5102bfcd321SSteve Yin 5112bfcd321SSteve Yin return Rectangle( mpRepr->GetPosPixel(), mpRepr->GetSizePixel() ); 5122bfcd321SSteve Yin } 5132bfcd321SSteve Yin 5142bfcd321SSteve Yin Sequence< sal_Int8 > SvtRulerAccessible::getUniqueId( void ) 5152bfcd321SSteve Yin { 5162bfcd321SSteve Yin static OImplementationId* pId = 0; 5172bfcd321SSteve Yin if( !pId ) 5182bfcd321SSteve Yin { 5192bfcd321SSteve Yin MutexGuard aGuard( Mutex::getGlobalMutex() ); 5202bfcd321SSteve Yin if( !pId) 5212bfcd321SSteve Yin { 5222bfcd321SSteve Yin static OImplementationId aId; 5232bfcd321SSteve Yin pId = &aId; 5242bfcd321SSteve Yin } 5252bfcd321SSteve Yin } 5262bfcd321SSteve Yin return pId->getImplementationId(); 5272bfcd321SSteve Yin } 5282bfcd321SSteve Yin 5292bfcd321SSteve Yin void SvtRulerAccessible::ThrowExceptionIfNotAlive( void ) throw( lang::DisposedException ) 5302bfcd321SSteve Yin { 5312bfcd321SSteve Yin if( IsNotAlive() ) 5322bfcd321SSteve Yin throw lang::DisposedException(); 5332bfcd321SSteve Yin } 5342bfcd321SSteve Yin 5352bfcd321SSteve Yin void SvtRulerAccessible::addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener )throw( com::sun::star::uno::RuntimeException ) 5362bfcd321SSteve Yin { 5372bfcd321SSteve Yin cppu::WeakAggComponentImplHelperBase::addEventListener( xListener ); 5382bfcd321SSteve Yin } 5392bfcd321SSteve Yin 5402bfcd321SSteve Yin void SvtRulerAccessible::removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw( com::sun::star::uno::RuntimeException ) 5412bfcd321SSteve Yin { 5422bfcd321SSteve Yin cppu::WeakAggComponentImplHelperBase::removeEventListener( xListener ); 5432bfcd321SSteve Yin } 5442bfcd321SSteve Yin 5452bfcd321SSteve Yin 5462bfcd321SSteve Yin // ------------------------------------------------------------------------------------------------- 5472bfcd321SSteve Yin 548