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
DBG_NAME(SvtRulerAccessible)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
~SvtRulerAccessible()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
getAccessibleContext(void)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
containsPoint(const awt::Point & rPoint)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
getAccessibleAtPoint(const awt::Point &)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
getBounds()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
getLocation()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
getLocationOnScreen()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
getSize()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
isShowing()1712bfcd321SSteve Yin sal_Bool SAL_CALL SvtRulerAccessible::isShowing() throw( RuntimeException )
1722bfcd321SSteve Yin {
1732bfcd321SSteve Yin return sal_True;
1742bfcd321SSteve Yin }
1752bfcd321SSteve Yin
isVisible()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
isFocusTraversable()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
getAccessibleChildCount(void)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
getAccessibleChild(sal_Int32)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
getAccessibleParent(void)2092bfcd321SSteve Yin uno::Reference< XAccessible > SAL_CALL SvtRulerAccessible::getAccessibleParent( void ) throw( RuntimeException )
2102bfcd321SSteve Yin {
2112bfcd321SSteve Yin return mxParent;
2122bfcd321SSteve Yin }
2132bfcd321SSteve Yin
getAccessibleIndexInParent(void)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
getAccessibleRole(void)2402bfcd321SSteve Yin sal_Int16 SAL_CALL SvtRulerAccessible::getAccessibleRole( void ) throw( RuntimeException )
2412bfcd321SSteve Yin {
2422bfcd321SSteve Yin return AccessibleRole::RULER;
2432bfcd321SSteve Yin }
2442bfcd321SSteve Yin
getAccessibleDescription(void)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
getAccessibleName(void)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 */
getAccessibleRelationSet(void)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
getAccessibleStateSet(void)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
getLocale(void)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
addEventListener(const uno::Reference<XAccessibleEventListener> & xListener)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
removeEventListener(const uno::Reference<XAccessibleEventListener> & xListener)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
addFocusListener(const uno::Reference<awt::XFocusListener> & xListener)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
removeFocusListener(const uno::Reference<awt::XFocusListener> & xListener)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
grabFocus()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
getAccessibleKeyBinding()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
getForeground()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 }
getBackground()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
getImplementationName(void)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
supportsService(const OUString & sServiceName)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
getSupportedServiceNames(void)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
getImplementationId(void)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
setName(const OUString & rName)4522bfcd321SSteve Yin void SvtRulerAccessible::setName( const OUString& rName )
4532bfcd321SSteve Yin {
4542bfcd321SSteve Yin msName = rName;
4552bfcd321SSteve Yin
4562bfcd321SSteve Yin }
4572bfcd321SSteve Yin
setDescription(const OUString & rDescr)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
disposing()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
GetBoundingBoxOnScreen(void)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();
4970deba7fbSSteve Yin //the absolute on screen pixel is wrong
4982bfcd321SSteve Yin //return Rectangle( mpRepr->GetParent()->OutputToScreenPixel( mpRepr->GetPosPixel() ), mpRepr->GetSizePixel() );
4992bfcd321SSteve Yin return Rectangle( mpRepr->GetParent()->OutputToAbsoluteScreenPixel( mpRepr->GetPosPixel() ), mpRepr->GetSizePixel() );
5002bfcd321SSteve Yin }
5012bfcd321SSteve Yin
GetBoundingBox(void)5022bfcd321SSteve Yin Rectangle SvtRulerAccessible::GetBoundingBox( void ) throw( RuntimeException )
5032bfcd321SSteve Yin {
5042bfcd321SSteve Yin ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
5052bfcd321SSteve Yin ::osl::MutexGuard aGuard( m_aMutex );
5062bfcd321SSteve Yin
5072bfcd321SSteve Yin ThrowExceptionIfNotAlive();
5082bfcd321SSteve Yin
5092bfcd321SSteve Yin return Rectangle( mpRepr->GetPosPixel(), mpRepr->GetSizePixel() );
5102bfcd321SSteve Yin }
5112bfcd321SSteve Yin
getUniqueId(void)5122bfcd321SSteve Yin Sequence< sal_Int8 > SvtRulerAccessible::getUniqueId( void )
5132bfcd321SSteve Yin {
5142bfcd321SSteve Yin static OImplementationId* pId = 0;
5152bfcd321SSteve Yin if( !pId )
5162bfcd321SSteve Yin {
5172bfcd321SSteve Yin MutexGuard aGuard( Mutex::getGlobalMutex() );
5182bfcd321SSteve Yin if( !pId)
5192bfcd321SSteve Yin {
5202bfcd321SSteve Yin static OImplementationId aId;
5212bfcd321SSteve Yin pId = &aId;
5222bfcd321SSteve Yin }
5232bfcd321SSteve Yin }
5242bfcd321SSteve Yin return pId->getImplementationId();
5252bfcd321SSteve Yin }
5262bfcd321SSteve Yin
ThrowExceptionIfNotAlive(void)5272bfcd321SSteve Yin void SvtRulerAccessible::ThrowExceptionIfNotAlive( void ) throw( lang::DisposedException )
5282bfcd321SSteve Yin {
5292bfcd321SSteve Yin if( IsNotAlive() )
5302bfcd321SSteve Yin throw lang::DisposedException();
5312bfcd321SSteve Yin }
5322bfcd321SSteve Yin
addEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & xListener)5332bfcd321SSteve Yin void SvtRulerAccessible::addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener )throw( com::sun::star::uno::RuntimeException )
5342bfcd321SSteve Yin {
5352bfcd321SSteve Yin cppu::WeakAggComponentImplHelperBase::addEventListener( xListener );
5362bfcd321SSteve Yin }
5372bfcd321SSteve Yin
removeEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & xListener)5382bfcd321SSteve Yin void SvtRulerAccessible::removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw( com::sun::star::uno::RuntimeException )
5392bfcd321SSteve Yin {
5402bfcd321SSteve Yin cppu::WeakAggComponentImplHelperBase::removeEventListener( xListener );
5412bfcd321SSteve Yin }
5422bfcd321SSteve Yin
5432bfcd321SSteve Yin
5442bfcd321SSteve Yin // -------------------------------------------------------------------------------------------------
5452bfcd321SSteve Yin
546