LCOV - code coverage report
Current view: top level - svtools/source/control - toolbarmenuacc.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 396 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 64 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include <com/sun/star/accessibility/AccessibleEventId.hpp>
      22             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      23             : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
      24             : 
      25             : #include <unotools/accessiblestatesethelper.hxx>
      26             : 
      27             : #include <vcl/svapp.hxx>
      28             : #include <vcl/settings.hxx>
      29             : 
      30             : #include <svtools/toolbarmenu.hxx>
      31             : 
      32             : #include "toolbarmenuimp.hxx"
      33             : 
      34             : 
      35             : using namespace ::com::sun::star;
      36             : using namespace ::com::sun::star::uno;
      37             : using namespace ::com::sun::star::lang;
      38             : using namespace ::com::sun::star::accessibility;
      39             : 
      40             : namespace svtools {
      41             : 
      42             : 
      43             : // - ToolbarMenuAcc -
      44             : 
      45             : 
      46           0 : ToolbarMenuAcc::ToolbarMenuAcc( ToolbarMenu_Impl& rParent )
      47             : : ToolbarMenuAccComponentBase(m_aMutex)
      48             : , mpParent( &rParent )
      49           0 : , mbIsFocused(false)
      50             : {
      51           0 :     mpParent->mrMenu.AddEventListener( LINK( this, ToolbarMenuAcc, WindowEventListener ) );
      52           0 : }
      53             : 
      54             : 
      55             : 
      56           0 : ToolbarMenuAcc::~ToolbarMenuAcc()
      57             : {
      58           0 :     if( mpParent )
      59           0 :         mpParent->mrMenu.RemoveEventListener( LINK( this, ToolbarMenuAcc, WindowEventListener ) );
      60           0 : }
      61             : 
      62             : 
      63             : 
      64           0 : IMPL_LINK( ToolbarMenuAcc, WindowEventListener, VclSimpleEvent*, pEvent )
      65             : {
      66             :     DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
      67             : 
      68             :     /* Ignore VCLEVENT_WINDOW_ENDPOPUPMODE, because the UNO accessibility wrapper
      69             :      * might have been destroyed by the previous VCLEventListener (if no AT tool
      70             :      * is running), e.g. sub-toolbars in impress.
      71             :      */
      72           0 :     if ( mpParent && pEvent && pEvent->ISA( VclWindowEvent ) && (pEvent->GetId() != VCLEVENT_WINDOW_ENDPOPUPMODE) )
      73             :     {
      74             :         DBG_ASSERT( static_cast<VclWindowEvent*>(pEvent)->GetWindow(), "Window???" );
      75           0 :         if( !static_cast<VclWindowEvent*>(pEvent)->GetWindow()->IsAccessibilityEventsSuppressed() || ( pEvent->GetId() == VCLEVENT_OBJECT_DYING ) )
      76             :         {
      77           0 :             ProcessWindowEvent( *static_cast<VclWindowEvent*>(pEvent) );
      78             :         }
      79             :     }
      80           0 :     return 0;
      81             : }
      82             : 
      83             : 
      84             : 
      85           0 : void ToolbarMenuAcc::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
      86             : {
      87           0 :     switch ( rVclWindowEvent.GetId() )
      88             :     {
      89             :         case VCLEVENT_OBJECT_DYING:
      90             :         {
      91           0 :             mpParent->mrMenu.RemoveEventListener( LINK( this, ToolbarMenuAcc, WindowEventListener ) );
      92           0 :             mpParent = 0;
      93             :         }
      94           0 :         break;
      95             : 
      96             :         case VCLEVENT_WINDOW_GETFOCUS:
      97             :         {
      98           0 :             if( !mbIsFocused )
      99             :             {
     100           0 :                 mpParent->notifyHighlightedEntry();
     101           0 :                 mbIsFocused = true;
     102             :             }
     103             :         }
     104           0 :         break;
     105             :         case VCLEVENT_WINDOW_LOSEFOCUS:
     106             :         {
     107           0 :             if( mbIsFocused )
     108             :             {
     109           0 :                 mbIsFocused = false;
     110             :             }
     111             :         }
     112           0 :         break;
     113             :         default:
     114             :         {
     115             :         }
     116           0 :         break;
     117             :     }
     118           0 : }
     119             : 
     120             : 
     121             : 
     122           0 : void ToolbarMenuAcc::FireAccessibleEvent( short nEventId, const Any& rOldValue, const Any& rNewValue )
     123             : {
     124           0 :     if( nEventId )
     125             :     {
     126           0 :         EventListenerVector                  aTmpListeners( mxEventListeners );
     127           0 :         AccessibleEventObject aEvtObject;
     128             : 
     129           0 :         aEvtObject.EventId = nEventId;
     130           0 :         aEvtObject.Source = static_cast<XWeak*>(this);
     131           0 :         aEvtObject.NewValue = rNewValue;
     132           0 :         aEvtObject.OldValue = rOldValue;
     133             : 
     134           0 :         for (EventListenerVector::const_iterator aIter( aTmpListeners.begin() ), aEnd( aTmpListeners.end() );
     135             :             aIter != aEnd ; ++aIter)
     136             :         {
     137             :             try
     138             :             {
     139           0 :                 (*aIter)->notifyEvent( aEvtObject );
     140             :             }
     141           0 :             catch( Exception& )
     142             :             {
     143             :             }
     144           0 :         }
     145             :     }
     146           0 : }
     147             : 
     148             : 
     149             : 
     150           0 : Reference< XAccessibleContext > SAL_CALL ToolbarMenuAcc::getAccessibleContext() throw (RuntimeException, std::exception)
     151             : {
     152           0 :     ThrowIfDisposed();
     153           0 :     return this;
     154             : }
     155             : 
     156             : 
     157             : 
     158           0 : sal_Int32 SAL_CALL ToolbarMenuAcc::getAccessibleChildCount() throw (RuntimeException, std::exception)
     159             : {
     160           0 :     const SolarMutexGuard aSolarGuard;
     161           0 :     ThrowIfDisposed();
     162             : 
     163           0 :     return mpParent->getAccessibleChildCount();
     164             : }
     165             : 
     166             : 
     167             : 
     168           0 : Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     169             : {
     170           0 :     const SolarMutexGuard aSolarGuard;
     171           0 :     ThrowIfDisposed();
     172             : 
     173           0 :     return mpParent->getAccessibleChild(i);
     174             : }
     175             : 
     176             : 
     177             : 
     178           0 : Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getAccessibleParent() throw (RuntimeException, std::exception)
     179             : {
     180           0 :     ThrowIfDisposed();
     181           0 :     const SolarMutexGuard aSolarGuard;
     182             : 
     183           0 :     Reference< XAccessible > xRet;
     184             : 
     185           0 :     vcl::Window* pParent = mpParent->mrMenu.GetParent();
     186           0 :     if( pParent )
     187           0 :         xRet = pParent->GetAccessible();
     188             : 
     189           0 :     return xRet;
     190             : }
     191             : 
     192             : 
     193             : 
     194           0 : sal_Int32 SAL_CALL ToolbarMenuAcc::getAccessibleIndexInParent() throw (RuntimeException, std::exception)
     195             : {
     196           0 :     const SolarMutexGuard aSolarGuard;
     197           0 :     ThrowIfDisposed();
     198             : 
     199           0 :     vcl::Window* pParent = mpParent->mrMenu.GetParent();
     200           0 :     if( pParent )
     201             :     {
     202           0 :         for( sal_uInt16 i = 0, nCount = pParent->GetChildCount(); i < nCount ; i++ )
     203             :         {
     204           0 :             if( pParent->GetChild( i ) == &mpParent->mrMenu )
     205           0 :                 return i;
     206             :         }
     207             :     }
     208             : 
     209           0 :     return 0;
     210             : }
     211             : 
     212             : 
     213             : 
     214           0 : sal_Int16 SAL_CALL ToolbarMenuAcc::getAccessibleRole() throw (RuntimeException, std::exception)
     215             : {
     216           0 :     ThrowIfDisposed();
     217           0 :     return AccessibleRole::LIST;
     218             : }
     219             : 
     220             : 
     221             : 
     222           0 : OUString SAL_CALL ToolbarMenuAcc::getAccessibleDescription() throw (RuntimeException, std::exception)
     223             : {
     224           0 :     ThrowIfDisposed();
     225           0 :     return OUString( "ToolbarMenu" );
     226             : }
     227             : 
     228             : 
     229             : 
     230           0 : OUString SAL_CALL ToolbarMenuAcc::getAccessibleName() throw (RuntimeException, std::exception)
     231             : {
     232           0 :     ThrowIfDisposed();
     233           0 :     const SolarMutexGuard aSolarGuard;
     234           0 :     OUString aRet;
     235             : 
     236           0 :     if( mpParent )
     237           0 :         aRet = mpParent->mrMenu.GetAccessibleName();
     238             : 
     239           0 :     if( aRet.isEmpty() )
     240             :     {
     241           0 :         vcl::Window* pLabel = mpParent->mrMenu.GetAccessibleRelationLabeledBy();
     242           0 :         if( pLabel && pLabel != &mpParent->mrMenu )
     243           0 :             aRet = OutputDevice::GetNonMnemonicString( pLabel->GetText() );
     244             :     }
     245             : 
     246           0 :     return aRet;
     247             : }
     248             : 
     249             : 
     250             : 
     251           0 : Reference< XAccessibleRelationSet > SAL_CALL ToolbarMenuAcc::getAccessibleRelationSet() throw (RuntimeException, std::exception)
     252             : {
     253           0 :     ThrowIfDisposed();
     254           0 :     return Reference< XAccessibleRelationSet >();
     255             : }
     256             : 
     257             : 
     258             : 
     259           0 : Reference< XAccessibleStateSet > SAL_CALL ToolbarMenuAcc::getAccessibleStateSet() throw (RuntimeException, std::exception)
     260             : {
     261           0 :     ThrowIfDisposed();
     262           0 :     ::utl::AccessibleStateSetHelper* pStateSet = new ::utl::AccessibleStateSetHelper();
     263             : 
     264             :     // Set some states.
     265           0 :     pStateSet->AddState (AccessibleStateType::ENABLED);
     266           0 :     pStateSet->AddState (AccessibleStateType::SENSITIVE);
     267           0 :     pStateSet->AddState (AccessibleStateType::SHOWING);
     268           0 :     pStateSet->AddState (AccessibleStateType::VISIBLE);
     269           0 :     pStateSet->AddState (AccessibleStateType::MANAGES_DESCENDANTS);
     270           0 :     pStateSet->AddState (AccessibleStateType::FOCUSABLE);
     271           0 :     if (mbIsFocused)
     272           0 :         pStateSet->AddState (AccessibleStateType::FOCUSED);
     273             : 
     274           0 :     return pStateSet;
     275             : }
     276             : 
     277             : 
     278             : 
     279           0 : Locale SAL_CALL ToolbarMenuAcc::getLocale() throw (IllegalAccessibleComponentStateException, RuntimeException, std::exception)
     280             : {
     281           0 :     ThrowIfDisposed();
     282           0 :     const SolarMutexGuard aSolarGuard;
     283           0 :     const OUString aEmptyStr;
     284           0 :     Reference< XAccessible > xParent( getAccessibleParent() );
     285           0 :     Locale aRet( aEmptyStr, aEmptyStr, aEmptyStr );
     286             : 
     287           0 :     if( xParent.is() )
     288             :     {
     289           0 :         Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
     290             : 
     291           0 :         if( xParentContext.is() )
     292           0 :             aRet = xParentContext->getLocale ();
     293             :     }
     294             : 
     295           0 :     return aRet;
     296             : }
     297             : 
     298             : 
     299             : 
     300           0 : void SAL_CALL ToolbarMenuAcc::addAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener ) throw (RuntimeException, std::exception)
     301             : {
     302           0 :     ThrowIfDisposed();
     303           0 :     ::osl::MutexGuard aGuard(m_aMutex);
     304             : 
     305           0 :     if( rxListener.is() )
     306             :     {
     307           0 :            EventListenerVector::const_iterator aIter = mxEventListeners.begin();
     308           0 :         bool bFound = false;
     309             : 
     310           0 :         while( !bFound && ( aIter != mxEventListeners.end() ) )
     311             :         {
     312           0 :             if( *aIter == rxListener )
     313           0 :                 bFound = true;
     314             :             else
     315           0 :                 ++aIter;
     316             :         }
     317             : 
     318           0 :         if (!bFound)
     319           0 :             mxEventListeners.push_back( rxListener );
     320           0 :     }
     321           0 : }
     322             : 
     323             : 
     324             : 
     325           0 : void SAL_CALL ToolbarMenuAcc::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener ) throw (RuntimeException, std::exception)
     326             : {
     327           0 :     ThrowIfDisposed();
     328           0 :     ::osl::MutexGuard aGuard(m_aMutex);
     329             : 
     330           0 :     if( rxListener.is() )
     331             :     {
     332           0 :         EventListenerVector::iterator aIter = std::find(mxEventListeners.begin(), mxEventListeners.end(), rxListener);
     333           0 :         if (aIter != mxEventListeners.end())
     334           0 :             mxEventListeners.erase(aIter);
     335           0 :     }
     336           0 : }
     337             : 
     338             : 
     339             : 
     340           0 : sal_Bool SAL_CALL ToolbarMenuAcc::containsPoint( const awt::Point& aPoint ) throw (RuntimeException, std::exception)
     341             : {
     342           0 :     ThrowIfDisposed();
     343           0 :     const awt::Rectangle aRect( getBounds() );
     344           0 :     const Point aSize( aRect.Width, aRect.Height );
     345           0 :     const Point aNullPoint, aTestPoint( aPoint.X, aPoint.Y );
     346             : 
     347           0 :     return Rectangle( aNullPoint, aSize ).IsInside( aTestPoint );
     348             : }
     349             : 
     350             : 
     351             : 
     352           0 : Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getAccessibleAtPoint( const awt::Point& aPoint ) throw (RuntimeException, std::exception)
     353             : {
     354           0 :     const SolarMutexGuard aSolarGuard;
     355           0 :     ThrowIfDisposed();
     356             : 
     357           0 :     Reference< XAccessible > xRet;
     358             : 
     359           0 :     const Point aVclPoint( aPoint.X, aPoint.Y );
     360             : 
     361           0 :     const int nEntryCount = mpParent->maEntryVector.size();
     362           0 :     for( int nEntry = 0; (nEntry < nEntryCount) && !xRet.is(); nEntry++ )
     363             :     {
     364           0 :         ToolbarMenuEntry* pEntry = mpParent->maEntryVector[nEntry];
     365           0 :         if( pEntry && pEntry->maRect.IsInside( aVclPoint ) )
     366             :         {
     367           0 :             if( pEntry->mpControl )
     368             :             {
     369           0 :                 awt::Point aChildPoint( aPoint.X - pEntry->maRect.Left(), aPoint.Y - pEntry->maRect.Top() );
     370           0 :                 Reference< XAccessibleComponent > xComp( pEntry->GetAccessible(true), UNO_QUERY_THROW );
     371           0 :                 xRet = xComp->getAccessibleAtPoint(aChildPoint);
     372             :             }
     373             :             else
     374             :             {
     375           0 :                 xRet = Reference< XAccessible >( pEntry->GetAccessible(true), UNO_QUERY );
     376             :             }
     377             :         }
     378             :     }
     379           0 :     return xRet;
     380             : }
     381             : 
     382             : 
     383             : 
     384           0 : awt::Rectangle SAL_CALL ToolbarMenuAcc::getBounds() throw (RuntimeException, std::exception)
     385             : {
     386           0 :     ThrowIfDisposed();
     387           0 :     const SolarMutexGuard aSolarGuard;
     388           0 :     const Point         aOutPos( mpParent->mrMenu.GetPosPixel() );
     389           0 :     const Size          aOutSize( mpParent->mrMenu.GetOutputSizePixel() );
     390           0 :     awt::Rectangle      aRet;
     391             : 
     392           0 :     aRet.X = aOutPos.X();
     393           0 :     aRet.Y = aOutPos.Y();
     394           0 :     aRet.Width = aOutSize.Width();
     395           0 :     aRet.Height = aOutSize.Height();
     396             : 
     397           0 :     return aRet;
     398             : }
     399             : 
     400             : 
     401             : 
     402           0 : awt::Point SAL_CALL ToolbarMenuAcc::getLocation() throw (RuntimeException, std::exception)
     403             : {
     404           0 :     ThrowIfDisposed();
     405           0 :     const SolarMutexGuard aSolarGuard;
     406           0 :     const Point aOutPos( mpParent->mrMenu.GetPosPixel() );
     407           0 :     return awt::Point( aOutPos.X(), aOutPos.Y() );
     408             : }
     409             : 
     410             : 
     411             : 
     412           0 : awt::Point SAL_CALL ToolbarMenuAcc::getLocationOnScreen()  throw (RuntimeException, std::exception)
     413             : {
     414           0 :     ThrowIfDisposed();
     415           0 :     const SolarMutexGuard aSolarGuard;
     416           0 :     const Point aScreenPos( mpParent->mrMenu.OutputToAbsoluteScreenPixel( Point() ) );
     417           0 :     return awt::Point( aScreenPos.X(), aScreenPos.Y() );
     418             : }
     419             : 
     420             : 
     421             : 
     422           0 : awt::Size SAL_CALL ToolbarMenuAcc::getSize() throw (RuntimeException, std::exception)
     423             : {
     424           0 :     ThrowIfDisposed();
     425           0 :     const SolarMutexGuard aSolarGuard;
     426           0 :     const Size aOutSize( mpParent->mrMenu.GetOutputSizePixel() );
     427           0 :     return awt::Size( aOutSize.Width(), aOutSize.Height() );
     428             : }
     429             : 
     430           0 : void SAL_CALL ToolbarMenuAcc::grabFocus() throw (RuntimeException, std::exception)
     431             : {
     432           0 :     ThrowIfDisposed();
     433           0 :     const SolarMutexGuard aSolarGuard;
     434           0 :     mpParent->mrMenu.GrabFocus();
     435           0 : }
     436             : 
     437           0 : sal_Int32 SAL_CALL ToolbarMenuAcc::getForeground() throw (RuntimeException, std::exception)
     438             : {
     439           0 :     ThrowIfDisposed();
     440           0 :     sal_uInt32 nColor = Application::GetSettings().GetStyleSettings().GetMenuTextColor().GetColor();
     441           0 :     return static_cast<sal_Int32>(nColor);
     442             : }
     443             : 
     444           0 : sal_Int32 SAL_CALL ToolbarMenuAcc::getBackground() throw (RuntimeException, std::exception)
     445             : {
     446           0 :     ThrowIfDisposed();
     447           0 :     sal_uInt32 nColor = Application::GetSettings().GetStyleSettings().GetMenuColor().GetColor();
     448           0 :     return static_cast<sal_Int32>(nColor);
     449             : }
     450             : 
     451           0 : void SAL_CALL ToolbarMenuAcc::selectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     452             : {
     453           0 :     const SolarMutexGuard aSolarGuard;
     454           0 :     ThrowIfDisposed();
     455             : 
     456           0 :     mpParent->selectAccessibleChild( nChildIndex );
     457           0 : }
     458             : 
     459           0 : sal_Bool SAL_CALL ToolbarMenuAcc::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     460             : {
     461           0 :     const SolarMutexGuard aSolarGuard;
     462           0 :     ThrowIfDisposed();
     463           0 :     return mpParent->isAccessibleChildSelected( nChildIndex );
     464             : }
     465             : 
     466             : 
     467             : 
     468           0 : void SAL_CALL ToolbarMenuAcc::clearAccessibleSelection() throw (RuntimeException, std::exception)
     469             : {
     470           0 :     const SolarMutexGuard aSolarGuard;
     471           0 :     ThrowIfDisposed();
     472           0 :     mpParent->clearAccessibleSelection();
     473           0 : }
     474             : 
     475             : 
     476             : 
     477           0 : void SAL_CALL ToolbarMenuAcc::selectAllAccessibleChildren() throw (RuntimeException, std::exception)
     478             : {
     479           0 :     ThrowIfDisposed();
     480             :     // unsupported due to single selection only
     481           0 : }
     482             : 
     483             : 
     484             : 
     485           0 : sal_Int32 SAL_CALL ToolbarMenuAcc::getSelectedAccessibleChildCount() throw (RuntimeException, std::exception)
     486             : {
     487           0 :     const SolarMutexGuard aSolarGuard;
     488           0 :     ThrowIfDisposed();
     489             : 
     490           0 :     return mpParent->mnHighlightedEntry != -1 ? 1 : 0;
     491             : }
     492             : 
     493             : 
     494             : 
     495           0 : Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     496             : {
     497           0 :     ThrowIfDisposed();
     498           0 :     const SolarMutexGuard aSolarGuard;
     499             : 
     500           0 :     if( (mpParent->mnHighlightedEntry != -1) && (nSelectedChildIndex == 0) )
     501             :     {
     502           0 :         ToolbarMenuEntry* pEntry = mpParent->maEntryVector[ mpParent->mnHighlightedEntry ];
     503           0 :         if( pEntry )
     504             :         {
     505           0 :             if( pEntry->mpControl )
     506             :             {
     507           0 :                 Reference< XAccessibleSelection > xSel( pEntry->GetAccessible(true), UNO_QUERY_THROW );
     508           0 :                 return xSel->getSelectedAccessibleChild(0);
     509             :             }
     510             :             else
     511           0 :                 return Reference< XAccessible >( pEntry->GetAccessible(true), UNO_QUERY );
     512             :         }
     513             :     }
     514             : 
     515           0 :     throw IndexOutOfBoundsException();
     516             : }
     517             : 
     518             : 
     519             : 
     520           0 : void SAL_CALL ToolbarMenuAcc::deselectAccessibleChild( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     521             : {
     522           0 :     ThrowIfDisposed();
     523           0 :     const SolarMutexGuard aSolarGuard;
     524             :     // Because of the single selection we can reset the whole selection when
     525             :     // the specified child is currently selected.
     526           0 :     if (isAccessibleChildSelected(nChildIndex))
     527           0 :         mpParent->clearAccessibleSelection();
     528           0 : }
     529             : 
     530             : 
     531             : 
     532           0 : void SAL_CALL ToolbarMenuAcc::disposing()
     533             : {
     534           0 :     EventListenerVector aListenerListCopy;
     535             : 
     536             :     {
     537             :         // Make a copy of the list and clear the original.
     538           0 :         const SolarMutexGuard aSolarGuard;
     539           0 :         ::osl::MutexGuard aGuard (m_aMutex);
     540           0 :         aListenerListCopy = mxEventListeners;
     541           0 :         mxEventListeners.clear();
     542             : 
     543             :         // Reset the pointer to the parent.  It has to be the one who has
     544             :         // disposed us because he is dying.
     545           0 :         mpParent = NULL;
     546             :     }
     547             : 
     548             :     // Inform all listeners that this objects is disposing.
     549           0 :     EventListenerVector::const_iterator aListenerIterator (aListenerListCopy.begin());
     550           0 :     EventObject aEvent (static_cast<XAccessible*>(this));
     551           0 :     while(aListenerIterator != aListenerListCopy.end())
     552             :     {
     553             :         try
     554             :         {
     555           0 :             (*aListenerIterator)->disposing (aEvent);
     556             :         }
     557           0 :         catch( Exception& )
     558             :         {
     559             :             // Ignore exceptions.
     560             :         }
     561             : 
     562           0 :         ++aListenerIterator;
     563           0 :     }
     564           0 : }
     565             : 
     566           0 : void ToolbarMenuAcc::ThrowIfDisposed() throw (DisposedException)
     567             : {
     568           0 :     if(rBHelper.bDisposed || rBHelper.bInDispose || !mpParent)
     569             :     {
     570           0 :         throw DisposedException ("object has been already disposed", static_cast<XWeak*>(this));
     571             :     }
     572           0 : }
     573             : 
     574             : 
     575             : // - ToolbarMenuEntryAcc -
     576             : 
     577             : 
     578           0 : ToolbarMenuEntryAcc::ToolbarMenuEntryAcc( ToolbarMenuEntry* pParent )
     579             : : ToolbarMenuEntryAccBase( m_aMutex )
     580           0 : , mpParent( pParent )
     581             : {
     582           0 : }
     583             : 
     584             : 
     585             : 
     586           0 : ToolbarMenuEntryAcc::~ToolbarMenuEntryAcc()
     587             : {
     588           0 : }
     589             : 
     590             : 
     591             : 
     592           0 : void SAL_CALL ToolbarMenuEntryAcc::disposing()
     593             : {
     594           0 :     EventListenerVector aListenerListCopy;
     595             : 
     596             :     {
     597             :         // Make a copy of the list and clear the original.
     598           0 :         const SolarMutexGuard aSolarGuard;
     599           0 :         ::osl::MutexGuard aGuard (m_aMutex);
     600           0 :         aListenerListCopy = mxEventListeners;
     601           0 :         mxEventListeners.clear();
     602             : 
     603             :         // Reset the pointer to the parent.  It has to be the one who has
     604             :         // disposed us because he is dying.
     605           0 :         mpParent = NULL;
     606             :     }
     607             : 
     608             :     // Inform all listeners that this objects is disposing.
     609           0 :     EventListenerVector::const_iterator aListenerIterator (aListenerListCopy.begin());
     610           0 :     EventObject aEvent (static_cast<XAccessible*>(this));
     611           0 :     while(aListenerIterator != aListenerListCopy.end())
     612             :     {
     613             :         try
     614             :         {
     615           0 :             (*aListenerIterator)->disposing (aEvent);
     616             :         }
     617           0 :         catch( Exception& )
     618             :         {
     619             :             // Ignore exceptions.
     620             :         }
     621             : 
     622           0 :         ++aListenerIterator;
     623           0 :     }
     624           0 : }
     625             : 
     626             : 
     627           0 : Reference< XAccessibleContext > SAL_CALL ToolbarMenuEntryAcc::getAccessibleContext() throw (RuntimeException, std::exception)
     628             : {
     629           0 :     return this;
     630             : }
     631             : 
     632             : 
     633             : 
     634           0 : sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getAccessibleChildCount() throw (RuntimeException, std::exception)
     635             : {
     636           0 :     return 0;
     637             : }
     638             : 
     639             : 
     640             : 
     641           0 : Reference< XAccessible > SAL_CALL ToolbarMenuEntryAcc::getAccessibleChild( sal_Int32 ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     642             : {
     643           0 :     throw IndexOutOfBoundsException();
     644             : }
     645             : 
     646             : 
     647             : 
     648           0 : Reference< XAccessible > SAL_CALL ToolbarMenuEntryAcc::getAccessibleParent() throw (RuntimeException, std::exception)
     649             : {
     650           0 :     const SolarMutexGuard aSolarGuard;
     651           0 :     Reference< XAccessible > xRet;
     652             : 
     653           0 :     if( mpParent )
     654           0 :         xRet = mpParent->mrMenu.GetAccessible();
     655             : 
     656           0 :     return xRet;
     657             : }
     658             : 
     659             : 
     660             : 
     661           0 : sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getAccessibleIndexInParent() throw (RuntimeException, std::exception)
     662             : {
     663           0 :     const SolarMutexGuard aSolarGuard;
     664             :     // The index defaults to -1 to indicate the child does not belong to its
     665             :     // parent.
     666           0 :     sal_Int32 nIndexInParent = -1;
     667             : 
     668           0 :     if( mpParent )
     669             :     {
     670           0 :         Reference< XAccessibleContext > xParent( mpParent->mrMenu.GetAccessible(), UNO_QUERY );
     671             : 
     672           0 :         if( xParent.is() )
     673             :         {
     674           0 :             Reference< XAccessible > xThis( this );
     675             : 
     676           0 :             const sal_Int32 nCount = xParent->getAccessibleChildCount();
     677           0 :             for( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++ )
     678             :             {
     679           0 :                 if( xParent->getAccessibleChild(nIndex) == xThis )
     680             :                 {
     681           0 :                     nIndexInParent = nIndex;
     682           0 :                     break;
     683             :                 }
     684           0 :             }
     685           0 :         }
     686             :     }
     687             : 
     688           0 :     return nIndexInParent;
     689             : }
     690             : 
     691             : 
     692             : 
     693           0 : sal_Int16 SAL_CALL ToolbarMenuEntryAcc::getAccessibleRole() throw (RuntimeException, std::exception)
     694             : {
     695           0 :     return AccessibleRole::LIST_ITEM;
     696             : }
     697             : 
     698             : 
     699             : 
     700           0 : OUString SAL_CALL ToolbarMenuEntryAcc::getAccessibleDescription() throw (RuntimeException, std::exception)
     701             : {
     702           0 :     return OUString();
     703             : }
     704             : 
     705             : 
     706             : 
     707           0 : OUString SAL_CALL ToolbarMenuEntryAcc::getAccessibleName() throw (RuntimeException, std::exception)
     708             : {
     709           0 :     const SolarMutexGuard aSolarGuard;
     710           0 :     OUString              aRet;
     711             : 
     712           0 :     if( mpParent )
     713             :     {
     714           0 :         aRet = mpParent->maText;
     715             : 
     716           0 :         if( aRet.isEmpty() )
     717             :         {
     718           0 :             aRet = "Item ";
     719           0 :             aRet += OUString::number( mpParent->mnEntryId );
     720             :         }
     721             :     }
     722             : 
     723           0 :     return aRet;
     724             : }
     725             : 
     726             : 
     727             : 
     728           0 : Reference< XAccessibleRelationSet > SAL_CALL ToolbarMenuEntryAcc::getAccessibleRelationSet() throw (RuntimeException, std::exception)
     729             : {
     730           0 :     return Reference< XAccessibleRelationSet >();
     731             : }
     732             : 
     733             : 
     734             : 
     735           0 : Reference< XAccessibleStateSet > SAL_CALL ToolbarMenuEntryAcc::getAccessibleStateSet() throw (RuntimeException, std::exception)
     736             : {
     737           0 :     const SolarMutexGuard aSolarGuard;
     738           0 :     ::utl::AccessibleStateSetHelper*    pStateSet = new ::utl::AccessibleStateSetHelper;
     739             : 
     740           0 :     if( mpParent )
     741             :     {
     742           0 :         pStateSet->AddState (AccessibleStateType::ENABLED);
     743           0 :         pStateSet->AddState (AccessibleStateType::SENSITIVE);
     744           0 :         pStateSet->AddState (AccessibleStateType::SHOWING);
     745           0 :         pStateSet->AddState (AccessibleStateType::VISIBLE);
     746           0 :         pStateSet->AddState (AccessibleStateType::TRANSIENT);
     747           0 :         if( mpParent->mnEntryId != TITLE_ID )
     748             :         {
     749           0 :             pStateSet->AddState( AccessibleStateType::SELECTABLE );
     750             : 
     751             :             // SELECTED
     752           0 :             if( mpParent->mrMenu.getHighlightedEntryId() == mpParent->mnEntryId )
     753           0 :                 pStateSet->AddState( AccessibleStateType::SELECTED );
     754             :         }
     755             :     }
     756             : 
     757           0 :     return pStateSet;
     758             : }
     759             : 
     760             : 
     761             : 
     762           0 : Locale SAL_CALL ToolbarMenuEntryAcc::getLocale() throw (IllegalAccessibleComponentStateException, RuntimeException, std::exception)
     763             : {
     764           0 :     const OUString aEmptyStr;
     765           0 :     Locale aRet( aEmptyStr, aEmptyStr, aEmptyStr );
     766             : 
     767           0 :     Reference< XAccessible > xParent( getAccessibleParent() );
     768           0 :     if( xParent.is() )
     769             :     {
     770           0 :         Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
     771             : 
     772           0 :         if( xParentContext.is() )
     773           0 :             aRet = xParentContext->getLocale();
     774             :     }
     775             : 
     776           0 :     return aRet;
     777             : }
     778             : 
     779             : 
     780             : 
     781           0 : void SAL_CALL ToolbarMenuEntryAcc::addAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener ) throw (RuntimeException, std::exception)
     782             : {
     783           0 :     const ::osl::MutexGuard aGuard( maMutex );
     784             : 
     785           0 :     if( rxListener.is() )
     786             :     {
     787           0 :         for (EventListenerVector::const_iterator aIter( mxEventListeners.begin() ), aEnd( mxEventListeners.end() );
     788             :             aIter != aEnd; ++aIter )
     789             :         {
     790           0 :             if( *aIter == rxListener )
     791           0 :                 return;
     792             :         }
     793             :         // listener not found so add it
     794           0 :         mxEventListeners.push_back( rxListener );
     795           0 :     }
     796             : }
     797             : 
     798             : 
     799             : 
     800           0 : void SAL_CALL ToolbarMenuEntryAcc::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener ) throw (RuntimeException, std::exception)
     801             : {
     802           0 :     const ::osl::MutexGuard aGuard( maMutex );
     803             : 
     804           0 :     if( rxListener.is() )
     805             :     {
     806           0 :         EventListenerVector::iterator aIter = std::find(mxEventListeners.begin(), mxEventListeners.end(), rxListener);
     807           0 :         if (aIter != mxEventListeners.end())
     808           0 :             mxEventListeners.erase(aIter);
     809           0 :     }
     810           0 : }
     811             : 
     812             : 
     813             : 
     814           0 : sal_Bool SAL_CALL ToolbarMenuEntryAcc::containsPoint( const awt::Point& aPoint ) throw (RuntimeException, std::exception)
     815             : {
     816           0 :     const awt::Rectangle    aRect( getBounds() );
     817           0 :     const Point             aSize( aRect.Width, aRect.Height );
     818           0 :     const Point             aNullPoint, aTestPoint( aPoint.X, aPoint.Y );
     819             : 
     820           0 :     return Rectangle( aNullPoint, aSize ).IsInside( aTestPoint );
     821             : }
     822             : 
     823             : 
     824             : 
     825           0 : Reference< XAccessible > SAL_CALL ToolbarMenuEntryAcc::getAccessibleAtPoint( const awt::Point& ) throw (RuntimeException, std::exception)
     826             : {
     827           0 :     Reference< XAccessible > xRet;
     828           0 :     return xRet;
     829             : }
     830             : 
     831             : 
     832             : 
     833           0 : awt::Rectangle SAL_CALL ToolbarMenuEntryAcc::getBounds() throw (RuntimeException, std::exception)
     834             : {
     835           0 :     const SolarMutexGuard aSolarGuard;
     836           0 :     awt::Rectangle      aRet;
     837             : 
     838           0 :     if( mpParent )
     839             :     {
     840           0 :         Rectangle   aRect( mpParent->maRect );
     841           0 :         Point       aOrigin;
     842           0 :         Rectangle   aParentRect( aOrigin, mpParent->mrMenu.GetOutputSizePixel() );
     843             : 
     844           0 :         aRect.Intersection( aParentRect );
     845             : 
     846           0 :         aRet.X = aRect.Left();
     847           0 :         aRet.Y = aRect.Top();
     848           0 :         aRet.Width = aRect.GetWidth();
     849           0 :         aRet.Height = aRect.GetHeight();
     850             :     }
     851             : 
     852           0 :     return aRet;
     853             : }
     854             : 
     855             : 
     856             : 
     857           0 : awt::Point SAL_CALL ToolbarMenuEntryAcc::getLocation() throw (RuntimeException, std::exception)
     858             : {
     859           0 :     const awt::Rectangle aRect( getBounds() );
     860           0 :     return awt::Point( aRect.X, aRect.Y );
     861             : }
     862             : 
     863             : 
     864             : 
     865           0 : awt::Point SAL_CALL ToolbarMenuEntryAcc::getLocationOnScreen() throw (RuntimeException, std::exception)
     866             : {
     867           0 :     const SolarMutexGuard aSolarGuard;
     868           0 :     awt::Point aRet;
     869             : 
     870           0 :     if( mpParent )
     871             :     {
     872           0 :         const Point aScreenPos( mpParent->mrMenu.OutputToAbsoluteScreenPixel( mpParent->maRect.TopLeft() ) );
     873             : 
     874           0 :         aRet.X = aScreenPos.X();
     875           0 :         aRet.Y = aScreenPos.Y();
     876             :     }
     877             : 
     878           0 :     return aRet;
     879             : }
     880             : 
     881             : 
     882             : 
     883           0 : awt::Size SAL_CALL ToolbarMenuEntryAcc::getSize() throw (RuntimeException, std::exception)
     884             : {
     885           0 :     const awt::Rectangle aRect( getBounds() );
     886           0 :     awt::Size aRet;
     887             : 
     888           0 :     aRet.Width = aRect.Width;
     889           0 :     aRet.Height = aRect.Height;
     890             : 
     891           0 :     return aRet;
     892             : }
     893             : 
     894           0 : void SAL_CALL ToolbarMenuEntryAcc::grabFocus() throw (RuntimeException, std::exception)
     895             : {
     896             :     // nothing to do
     897           0 : }
     898             : 
     899           0 : sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getForeground(  ) throw (RuntimeException, std::exception)
     900             : {
     901           0 :     return static_cast<sal_Int32>(Application::GetSettings().GetStyleSettings().GetMenuTextColor().GetColor());
     902             : }
     903             : 
     904           0 : sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getBackground(  )  throw (RuntimeException, std::exception)
     905             : {
     906           0 :     return static_cast<sal_Int32>(Application::GetSettings().GetStyleSettings().GetMenuColor().GetColor());
     907             : }
     908             : 
     909             : }
     910             : 
     911             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11