LCOV - code coverage report
Current view: top level - svx/source/accessibility - svxpixelctlaccessiblecontext.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 395 0.0 %
Date: 2014-04-14 Functions: 0 81 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             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      21             : #include <com/sun/star/accessibility/AccessibleEventId.hpp>
      22             : #include <unotools/accessiblestatesethelper.hxx>
      23             : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
      24             : #include <com/sun/star/beans/PropertyChangeEvent.hpp>
      25             : #include <com/sun/star/awt/XWindow.hpp>
      26             : #include <cppuhelper/supportsservice.hxx>
      27             : #include <cppuhelper/typeprovider.hxx>
      28             : #include <toolkit/helper/vclunohelper.hxx>
      29             : #include <toolkit/helper/convert.hxx>
      30             : #include <vcl/svapp.hxx>
      31             : #include <vcl/settings.hxx>
      32             : #include <osl/mutex.hxx>
      33             : #include <rtl/uuid.h>
      34             : #include <tools/debug.hxx>
      35             : #include <tools/gen.hxx>
      36             : 
      37             : #include <svx/dialogs.hrc>
      38             : #include "accessibility.hrc"
      39             : #include <svx/dlgctrl.hxx>
      40             : 
      41             : #include <svx/dialmgr.hxx>
      42             : #include <comphelper/accessibleeventnotifier.hxx>
      43             : 
      44             : #include <unotools/accessiblerelationsethelper.hxx>
      45             : 
      46             : #include "svxpixelctlaccessiblecontext.hxx"
      47             : #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
      48             : 
      49             : using namespace ::cppu;
      50             : using namespace ::osl;
      51             : using namespace ::rtl;
      52             : using namespace ::com::sun::star;
      53             : using namespace ::com::sun::star::uno;
      54             : using namespace ::com::sun::star::accessibility;
      55             : 
      56           0 : SvxPixelCtlAccessible::SvxPixelCtlAccessible( SvxPixelCtl& rControl) :
      57             :     SvxPixelCtlAccessible_BASE(m_aMutex),
      58             :     mrPixelCtl(rControl),
      59           0 :     mnClientId(0)
      60             : {
      61           0 : }
      62             : 
      63           0 : SvxPixelCtlAccessible::~SvxPixelCtlAccessible()
      64             : {
      65           0 :     if( IsAlive() )
      66             :     {
      67           0 :         osl_atomic_increment( &m_refCount );
      68           0 :         dispose();      // set mpRepr = NULL & release all childs
      69             :     }
      70           0 : }
      71             : /*-- 04.02.2002 14:11:55---------------------------------------------------
      72             : 
      73             :   -----------------------------------------------------------------------*/
      74           0 : uno::Reference< XAccessibleContext > SvxPixelCtlAccessible::getAccessibleContext(  )
      75             :     throw (uno::RuntimeException, std::exception)
      76             : {
      77           0 :     return this;
      78             : }
      79             : 
      80           0 : sal_Int32 SvxPixelCtlAccessible::getAccessibleChildCount(  ) throw (uno::RuntimeException, std::exception)
      81             : {
      82           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
      83           0 :     return mrPixelCtl.GetSquares();
      84             : }
      85             : /*-- 04.02.2002 14:11:56---------------------------------------------------
      86             : 
      87             :   -----------------------------------------------------------------------*/
      88           0 : uno::Reference< XAccessible > SvxPixelCtlAccessible::getAccessibleChild( sal_Int32 i )
      89             :     throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
      90             : {
      91           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
      92           0 :     if ( i < 0 || i >= getAccessibleChildCount())
      93           0 :         throw lang::IndexOutOfBoundsException();
      94           0 :     uno::Reference <XAccessible> xAcc;
      95           0 :     return CreateChild(i, mrPixelCtl.IndexToPoint(i));
      96             : }
      97             : 
      98             : 
      99             : 
     100           0 : uno::Reference< XAccessible > SvxPixelCtlAccessible::getAccessibleParent(  )
     101             :     throw (uno::RuntimeException, std::exception)
     102             : {
     103           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     104           0 :     return mrPixelCtl.GetParent()->GetAccessible( true );
     105             : }
     106             : 
     107           0 : sal_Int32 SvxPixelCtlAccessible::getAccessibleIndexInParent(  )
     108             :     throw (uno::RuntimeException, std::exception)
     109             : {
     110           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     111           0 :     sal_uInt16 nIdx = 0;
     112           0 :     Window* pTabPage = mrPixelCtl.GetParent();
     113           0 :     sal_uInt16 nChildren = pTabPage->GetChildCount();
     114           0 :     for(nIdx = 0; nIdx < nChildren; nIdx++)
     115           0 :         if(pTabPage->GetChild( nIdx ) == &mrPixelCtl)
     116           0 :             break;
     117           0 :     return nIdx;
     118             : }
     119             : /*-- 04.02.2002 14:11:57---------------------------------------------------
     120             : 
     121             :   -----------------------------------------------------------------------*/
     122           0 : sal_Int16 SvxPixelCtlAccessible::getAccessibleRole(  ) throw (uno::RuntimeException, std::exception)
     123             : {
     124           0 :     return AccessibleRole::LIST;
     125             : }
     126             : 
     127           0 : OUString SvxPixelCtlAccessible::getAccessibleDescription(  )
     128             :     throw (uno::RuntimeException, std::exception)
     129             : {
     130             : 
     131           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     132           0 :     return mrPixelCtl.GetAccessibleDescription();
     133             : }
     134             : 
     135           0 : OUString SvxPixelCtlAccessible::getAccessibleName(  )
     136             :     throw (uno::RuntimeException, std::exception)
     137             : {
     138             : 
     139           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     140           0 :     return mrPixelCtl.GetAccessibleName();
     141             : }
     142             : 
     143           0 : uno::Reference< XAccessibleRelationSet > SvxPixelCtlAccessible::getAccessibleRelationSet(  )
     144             :     throw (uno::RuntimeException, std::exception)
     145             : {
     146           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     147           0 :     utl::AccessibleRelationSetHelper* rRelationSet = new utl::AccessibleRelationSetHelper;
     148           0 :     uno::Reference< css::accessibility::XAccessibleRelationSet > rSet = rRelationSet;
     149           0 :     Window *pLabeledBy = mrPixelCtl.GetAccessibleRelationLabeledBy();
     150           0 :     if ( pLabeledBy && pLabeledBy != &mrPixelCtl )
     151             :     {
     152           0 :         uno::Sequence< uno::Reference< uno::XInterface > > aSequence(1);
     153           0 :         aSequence[0] = pLabeledBy->GetAccessible();
     154           0 :         rRelationSet->AddRelation( css::accessibility::AccessibleRelation( css::accessibility::AccessibleRelationType::LABELED_BY, aSequence ) );
     155             :     }
     156             : 
     157           0 :     Window* pMemberOf = mrPixelCtl.GetAccessibleRelationMemberOf();
     158           0 :     if ( pMemberOf && pMemberOf != &mrPixelCtl )
     159             :     {
     160           0 :         uno::Sequence< uno::Reference< uno::XInterface > > aSequence(1);
     161           0 :         aSequence[0] = pMemberOf->GetAccessible();
     162           0 :         rRelationSet->AddRelation( css::accessibility::AccessibleRelation( css::accessibility::AccessibleRelationType::MEMBER_OF, aSequence ) );
     163             :     }
     164           0 :     return rSet;
     165             : }
     166             : 
     167             : 
     168           0 : uno::Reference< XAccessibleStateSet > SvxPixelCtlAccessible::getAccessibleStateSet(  )
     169             :     throw (uno::RuntimeException, std::exception)
     170             : {
     171           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     172           0 :     utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
     173           0 :     uno::Reference< XAccessibleStateSet > xRet = pStateSetHelper;
     174             : 
     175             :     const sal_Int16 aStandardStates[] =
     176             :     {
     177             :         AccessibleStateType::FOCUSABLE,
     178             :         AccessibleStateType::SELECTABLE,
     179             :         AccessibleStateType::SHOWING,
     180             :         AccessibleStateType::VISIBLE,
     181             :         AccessibleStateType::OPAQUE,
     182             :         0
     183           0 :     };
     184             : 
     185           0 :     sal_Int16 nState = 0;
     186           0 :     while(aStandardStates[nState])
     187             :     {
     188           0 :         pStateSetHelper->AddState(aStandardStates[nState++]);
     189             :     }
     190           0 :     if(mrPixelCtl.IsEnabled())
     191           0 :         pStateSetHelper->AddState(AccessibleStateType::ENABLED);
     192           0 :     if(mrPixelCtl.HasFocus())
     193           0 :         pStateSetHelper->AddState(AccessibleStateType::FOCUSED);
     194           0 :     pStateSetHelper->AddState(AccessibleStateType::MANAGES_DESCENDANTS);
     195             : 
     196           0 :     return xRet;
     197             : }
     198             : 
     199             : 
     200           0 : com::sun::star::lang::Locale SvxPixelCtlAccessible::getLocale(  )
     201             :     throw (IllegalAccessibleComponentStateException, uno::RuntimeException, std::exception)
     202             : {
     203           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     204           0 :     if( getAccessibleParent().is() )
     205             :     {
     206           0 :         uno::Reference< XAccessibleContext >        xParentContext( getAccessibleParent()->getAccessibleContext() );
     207           0 :         if( xParentContext.is() )
     208           0 :             return xParentContext->getLocale();
     209             :     }
     210             : 
     211             :     //  No locale and no parent.  Therefore throw exception to indicate this
     212             :     //  cluelessness.
     213           0 :     throw IllegalAccessibleComponentStateException();
     214             : }
     215             : 
     216             : 
     217           0 : sal_Bool SvxPixelCtlAccessible::containsPoint( const awt::Point& aPt )
     218             :     throw (uno::RuntimeException, std::exception)
     219             : {
     220           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     221           0 :     Point aPoint(aPt.X, aPt.Y);
     222           0 :     return (aPoint.X() >= 0)
     223           0 :         && (aPoint.X() < mrPixelCtl.GetSizePixel().getWidth())
     224           0 :         && (aPoint.Y() >= 0)
     225           0 :         && (aPoint.Y() < mrPixelCtl.GetSizePixel().getHeight());
     226             : }
     227           0 : uno::Reference<XAccessible > SAL_CALL SvxPixelCtlAccessible::getAccessibleAtPoint (
     228             :         const awt::Point& aPoint)
     229             :     throw (uno::RuntimeException, std::exception)
     230             : {
     231           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     232           0 :     ensureIsAlive();
     233           0 :     uno::Reference <XAccessible> xAcc;
     234             : 
     235           0 :     Point childPoint;
     236           0 :     childPoint.X() = aPoint.X;
     237           0 :     childPoint.Y() = aPoint.Y;
     238             : 
     239           0 :     Point pt= mrPixelCtl.PixelToLogic(childPoint);
     240           0 :     long nIndex = mrPixelCtl.PointToIndex(pt);
     241           0 :     return CreateChild(nIndex, mrPixelCtl.IndexToPoint(nIndex));
     242             : }
     243             : 
     244           0 : awt::Rectangle SvxPixelCtlAccessible::getBounds(  ) throw (uno::RuntimeException, std::exception)
     245             : {
     246           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     247           0 :     awt::Rectangle aRet;
     248           0 :     Size aSz = mrPixelCtl.GetSizePixel();
     249           0 :     Point aPos = mrPixelCtl.GetPosPixel();
     250           0 :     aRet.X = aPos.X();
     251           0 :     aRet.Y = aPos.Y();
     252           0 :     aRet.Width = aSz.Width();
     253           0 :     aRet.Height = aSz.Height();
     254           0 :     return aRet;
     255             : }
     256             : 
     257           0 : awt::Point SvxPixelCtlAccessible::getLocation(  ) throw (uno::RuntimeException, std::exception)
     258             : {
     259           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     260           0 :     Point aPos;
     261           0 :     aPos = mrPixelCtl.GetPosPixel();
     262           0 :     awt::Point aRet(aPos.X(), aPos.Y());
     263           0 :     return aRet;
     264             : }
     265             : 
     266           0 : awt::Point SvxPixelCtlAccessible::getLocationOnScreen(  ) throw (uno::RuntimeException, std::exception)
     267             : {
     268           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     269           0 :     Rectangle rect = mrPixelCtl.GetWindowExtentsRelative(NULL);
     270           0 :     return awt::Point(rect.Left(),rect.Top() );
     271             : }
     272             : 
     273           0 : awt::Size SvxPixelCtlAccessible::getSize(  ) throw (uno::RuntimeException, std::exception)
     274             : {
     275           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     276           0 :     Size aSz = mrPixelCtl.GetSizePixel();
     277           0 :     return awt::Size(aSz.Width(),aSz.Height());
     278             : }
     279           0 : void SvxPixelCtlAccessible::grabFocus(  ) throw (uno::RuntimeException, std::exception)
     280             : {
     281           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     282           0 :     mrPixelCtl.GrabFocus();
     283           0 : }
     284             : 
     285           0 : sal_Int32 SvxPixelCtlAccessible::getForeground(  )
     286             :         throw (::com::sun::star::uno::RuntimeException, std::exception)
     287             : {
     288           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     289           0 :     return mrPixelCtl.GetControlForeground().GetColor();
     290             : }
     291             : 
     292           0 : sal_Int32 SvxPixelCtlAccessible::getBackground(  )
     293             :         throw (::com::sun::star::uno::RuntimeException, std::exception)
     294             : {
     295           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     296           0 :     return mrPixelCtl.GetControlBackground().GetColor();
     297             : }
     298             : 
     299           0 : OUString SvxPixelCtlAccessible::getImplementationName(  ) throw (uno::RuntimeException, std::exception)
     300             : {
     301           0 :     return OUString("SvxPixelCtlAccessible");
     302             : }
     303             : 
     304           0 : sal_Bool SvxPixelCtlAccessible::supportsService( const OUString& rServiceName )
     305             :     throw (uno::RuntimeException, std::exception)
     306             : {
     307           0 :     return cppu::supportsService( this, rServiceName );
     308             : }
     309             : 
     310           0 : uno::Sequence< OUString > SvxPixelCtlAccessible::getSupportedServiceNames(  )
     311             :     throw (uno::RuntimeException, std::exception)
     312             : {
     313           0 :     uno::Sequence< OUString > aRet(2);
     314           0 :     OUString* pArray = aRet.getArray();
     315           0 :     pArray[0] = "Accessible";
     316           0 :     pArray[1] = "AccessibleContext";
     317           0 :     pArray[2] = "AccessibleComponent";
     318           0 :     return aRet;
     319             : }
     320             : 
     321             : 
     322             : // XAccessibleSelection
     323             : 
     324           0 : void SAL_CALL SvxPixelCtlAccessible::selectAccessibleChild( sal_Int32 nChildIndex ) throw (lang::IndexOutOfBoundsException, RuntimeException, std::exception)
     325             : {
     326           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     327             : 
     328           0 :     if ( nChildIndex < 0 || nChildIndex >= getAccessibleChildCount())
     329           0 :         throw lang::IndexOutOfBoundsException();
     330             : 
     331           0 :     long nIndex = mrPixelCtl.ShowPosition(mrPixelCtl.IndexToPoint(nChildIndex));
     332           0 :     NotifyChild(nIndex,sal_True,sal_False);
     333           0 : }
     334             : 
     335           0 : sal_Bool SAL_CALL SvxPixelCtlAccessible::isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (lang::IndexOutOfBoundsException, RuntimeException, std::exception)
     336             : {
     337           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     338             : 
     339           0 :     return mrPixelCtl.GetFoucsPosIndex() == nChildIndex;
     340             : }
     341             : 
     342           0 : void SAL_CALL SvxPixelCtlAccessible::clearAccessibleSelection(  ) throw (RuntimeException, std::exception)
     343             : {
     344           0 : }
     345             : 
     346           0 : void SAL_CALL SvxPixelCtlAccessible::selectAllAccessibleChildren(  ) throw (RuntimeException, std::exception)
     347             : {
     348           0 : }
     349             : 
     350           0 : sal_Int32 SAL_CALL SvxPixelCtlAccessible::getSelectedAccessibleChildCount(  ) throw (RuntimeException, std::exception)
     351             : {
     352           0 :     return 1;
     353             : }
     354             : 
     355           0 : uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessible::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (lang::IndexOutOfBoundsException, RuntimeException, std::exception)
     356             : {
     357           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     358             : 
     359           0 :     if ( nSelectedChildIndex >= 1)
     360           0 :         throw lang::IndexOutOfBoundsException();
     361             : 
     362           0 :     uno::Reference< XAccessible > xChild;
     363           0 :     if(m_xCurChild.is())
     364             :     {
     365           0 :         xChild = m_xCurChild;
     366             :     }
     367           0 :     return xChild;
     368             : }
     369             : 
     370           0 : void SAL_CALL SvxPixelCtlAccessible::deselectAccessibleChild( sal_Int32 ) throw (lang::IndexOutOfBoundsException, RuntimeException, std::exception)
     371             : {
     372           0 : }
     373             : 
     374             : // Added by lq
     375           0 : void SvxPixelCtlAccessible::ensureIsAlive() const
     376             :     throw ( lang::DisposedException )
     377             : {
     378           0 :     if( !IsAlive() )
     379           0 :         throw lang::DisposedException();
     380           0 : }
     381             : 
     382             : //XAccessibleEventBroadcaster
     383           0 : void SAL_CALL SvxPixelCtlAccessible::addAccessibleEventListener( const uno::Reference< XAccessibleEventListener >& xListener )  throw( RuntimeException, std::exception )
     384             : {
     385           0 :     if (xListener.is())
     386             :     {
     387           0 :         ::osl::MutexGuard   aGuard( m_aMutex );
     388           0 :         if (!mnClientId)
     389           0 :                 mnClientId = comphelper::AccessibleEventNotifier::registerClient( );
     390           0 :         comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener );
     391             :     }
     392           0 : }
     393             : 
     394           0 : void SAL_CALL SvxPixelCtlAccessible::removeAccessibleEventListener( const uno::Reference< XAccessibleEventListener >& xListener )
     395             :     throw( RuntimeException, std::exception )
     396             : {
     397           0 :     if (xListener.is())
     398             :     {
     399           0 :         ::osl::MutexGuard   aGuard( m_aMutex );
     400             : 
     401           0 :         sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener );
     402           0 :         if ( !nListenerCount )
     403             :         {
     404           0 :             comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
     405           0 :             mnClientId = 0;
     406           0 :         }
     407             :     }
     408           0 : }
     409           0 : void SvxPixelCtlAccessible::CommitChange( const AccessibleEventObject& rEvent )
     410             : {
     411           0 :     if (mnClientId)
     412           0 :         comphelper::AccessibleEventNotifier::addEvent( mnClientId, rEvent );
     413           0 : }
     414             : 
     415             : //Solution:Add the event handling method
     416           0 : void SvxPixelCtlAccessible::FireAccessibleEvent (short nEventId, const ::com::sun::star::uno::Any& rOld, const ::com::sun::star::uno::Any& rNew)
     417             : {
     418           0 :     const uno::Reference< XInterface >  xSource( *this );
     419           0 :     CommitChange( AccessibleEventObject( xSource, nEventId, rNew,rOld ) );
     420           0 : }
     421             : 
     422           0 : void SAL_CALL SvxPixelCtlAccessible::disposing()
     423             : {
     424           0 :     if( !rBHelper.bDisposed )
     425             :     {
     426             :         {
     427           0 :             ::osl::MutexGuard   aGuard( m_aMutex );
     428           0 :             if ( mnClientId )
     429             :             {
     430           0 :                 comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
     431           0 :                 mnClientId =  0;
     432           0 :             }
     433             :         }
     434             :         //mxParent = uno::Reference< XAccessible >();
     435             : 
     436             :     }
     437           0 : }
     438             : 
     439           0 : void SvxPixelCtlAccessible::NotifyChild(long nIndex,sal_Bool bSelect ,sal_Bool bCheck)
     440             : {
     441             :     DBG_ASSERT( !(!bSelect && !bCheck),"" );//non is false
     442             : 
     443           0 :     SvxPixelCtlAccessibleChild *pChild= NULL;
     444             : 
     445           0 :     if (m_xCurChild.is())
     446             :     {
     447           0 :         pChild= static_cast<SvxPixelCtlAccessibleChild*>(m_xCurChild.get());
     448             :         DBG_ASSERT(pChild,"Child Must be Valid");
     449           0 :         if (pChild->getAccessibleIndexInParent() == nIndex )
     450             :         {
     451           0 :             if (bSelect)
     452             :             {
     453           0 :                 pChild->SelectChild(sal_True);
     454             :             }
     455           0 :             if (bCheck)
     456             :             {
     457           0 :                 pChild->ChangePixelColorOrBG(sal_Bool(mrPixelCtl.GetBitmapPixel(sal_uInt16(nIndex))));
     458           0 :                 pChild->CheckChild();
     459             :             }
     460           0 :             return ;
     461             :         }
     462             :     }
     463           0 :     uno::Reference <XAccessible> xNewChild =CreateChild(nIndex, mrPixelCtl.IndexToPoint(nIndex));
     464           0 :     SvxPixelCtlAccessibleChild *pNewChild= static_cast<SvxPixelCtlAccessibleChild*>(xNewChild.get());
     465             :     DBG_ASSERT(pNewChild,"Child Must be Valid");
     466             : 
     467           0 :     Any aNewValue,aOldValue;
     468           0 :     aNewValue<<= xNewChild;
     469             :     FireAccessibleEvent(    AccessibleEventId::ACTIVE_DESCENDANT_CHANGED,
     470             :                             aOldValue,
     471           0 :                             aNewValue );
     472             : 
     473           0 :     if (bSelect)
     474             :     {
     475           0 :         if (pChild)
     476             :         {
     477           0 :             pChild->SelectChild(sal_False);
     478             :         }
     479           0 :         pNewChild->SelectChild(sal_True);
     480             :     }
     481           0 :     if (bCheck)
     482             :     {
     483           0 :         pNewChild->CheckChild();
     484             :     }
     485           0 :     m_xCurChild= xNewChild;
     486             : 
     487             : 
     488             : }
     489             : 
     490           0 : uno::Reference<XAccessible> SvxPixelCtlAccessible::CreateChild (long nIndex,Point mPoint)
     491             : {
     492           0 :     long nX = mPoint.X();
     493           0 :     long nY = mPoint.Y();
     494           0 :     if( Application::GetSettings().GetLayoutRTL())
     495             :     {
     496           0 :         nX = (sal_uInt16) mrPixelCtl.GetWidth() - 1 - nX;
     497             :     }
     498             : 
     499           0 :     sal_Bool bPixelColorOrBG= sal_Bool(mrPixelCtl.GetBitmapPixel(sal_uInt16(nIndex)));
     500           0 :     Size size(mrPixelCtl.GetWidth() / mrPixelCtl.GetLineCount(),mrPixelCtl.GetHeight() / mrPixelCtl.GetLineCount());
     501           0 :     uno::Reference<XAccessible> xChild;
     502           0 :     xChild = new SvxPixelCtlAccessibleChild(mrPixelCtl,
     503             :                 bPixelColorOrBG,
     504             :                 Point(nX,nY),
     505             :                 Rectangle(mPoint,size),
     506             :                 this,
     507           0 :                 nIndex);
     508             : 
     509           0 :     return xChild;
     510             : }
     511             : 
     512             : 
     513           0 : void SvxPixelCtlAccessible::LoseFocus()
     514             : {
     515           0 :     m_xCurChild = uno::Reference< XAccessible >() ;
     516           0 : }
     517             : 
     518           0 : void SvxPixelCtlAccessibleChild::CheckChild()
     519             : {
     520           0 :     Any aChecked;
     521           0 :     aChecked <<= AccessibleStateType::CHECKED;
     522             : 
     523           0 :     if (m_bPixelColorOrBG)//Current Child State
     524             :     {
     525             :         FireAccessibleEvent(    AccessibleEventId::STATE_CHANGED,
     526             :                                 Any(),
     527           0 :                                 aChecked);
     528             :     }
     529             :     else
     530             :     {
     531             :         FireAccessibleEvent(    AccessibleEventId::STATE_CHANGED,
     532             :                                 aChecked,
     533           0 :                                 Any() );
     534           0 :     }
     535           0 : }
     536             : 
     537           0 : void SvxPixelCtlAccessibleChild::SelectChild( sal_Bool bSelect)
     538             : {
     539           0 :     Any aSelected;
     540           0 :     aSelected <<= AccessibleStateType::SELECTED;
     541             : 
     542           0 :     if (bSelect)
     543             :     {
     544             :         FireAccessibleEvent(    AccessibleEventId::STATE_CHANGED,
     545             :                                 Any(),
     546           0 :                                 aSelected);
     547             :     }
     548             :     else
     549             :     {
     550             :         FireAccessibleEvent(    AccessibleEventId::STATE_CHANGED,
     551             :                                 aSelected,
     552           0 :                                 Any());
     553           0 :     }
     554           0 : }
     555           0 : void SvxPixelCtlAccessibleChild::FireAccessibleEvent (
     556             :     short nEventId,
     557             :     const ::com::sun::star::uno::Any& rOld,
     558             :     const ::com::sun::star::uno::Any& rNew)
     559             : {
     560           0 :     const uno::Reference< XInterface >  xSource( *this );
     561           0 :     CommitChange( AccessibleEventObject( xSource, nEventId, rNew,rOld ) );
     562           0 : }
     563             : 
     564           0 : SvxPixelCtlAccessibleChild::SvxPixelCtlAccessibleChild(
     565             :     SvxPixelCtl& rWindow,
     566             :     sal_Bool bPixelColorOrBG,
     567             :     const Point &aPoint,
     568             :     const Rectangle& rBoundingBox,
     569             :     const uno::Reference<XAccessible>&  rxParent,
     570             :     long nIndexInParent ) :
     571             :     SvxPixelCtlAccessibleChild_BASE( m_aMutex ),
     572             :     mrParentWindow( rWindow ),
     573             :     mxParent(rxParent),
     574             :     m_bPixelColorOrBG(bPixelColorOrBG),
     575             :     maPoint(aPoint),
     576             :     mpBoundingBox( new Rectangle( rBoundingBox ) ),
     577             :     mnIndexInParent( nIndexInParent ),
     578           0 :     mnClientId( 0 )
     579             : {
     580           0 : }
     581             : 
     582             : 
     583           0 : SvxPixelCtlAccessibleChild::~SvxPixelCtlAccessibleChild()
     584             : {
     585           0 :     if( IsAlive() )
     586             :     {
     587           0 :         osl_atomic_increment( &m_refCount );
     588           0 :         dispose();      // set mpRepr = NULL & release all childs
     589             :     }
     590           0 : }
     591             : 
     592             : //=====  XAccessible  =========================================================
     593             : 
     594           0 : uno::Reference< XAccessibleContext> SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleContext( void ) throw( RuntimeException, std::exception )
     595             : {
     596           0 :     return this;
     597             : }
     598             : 
     599             : //=====  XAccessibleComponent  ================================================
     600             : 
     601           0 : sal_Bool SAL_CALL SvxPixelCtlAccessibleChild::containsPoint( const awt::Point& rPoint ) throw( RuntimeException, std::exception )
     602             : {
     603             :     // no guard -> done in getBounds()
     604             : //  return GetBoundingBox().IsInside( VCLPoint( rPoint ) );
     605           0 :     return Rectangle( Point( 0, 0 ), GetBoundingBox().GetSize() ).IsInside( VCLPoint( rPoint ) );
     606             : }
     607             : 
     608           0 : uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleAtPoint( const awt::Point& ) throw( RuntimeException, std::exception )
     609             : {
     610           0 :     return uno::Reference< XAccessible >();
     611             : }
     612             : 
     613           0 : awt::Rectangle SAL_CALL SvxPixelCtlAccessibleChild::getBounds() throw( RuntimeException, std::exception )
     614             : {
     615             :     // no guard -> done in getBoundingBox()
     616             :     //Modified by lq, 09/26
     617             :     //return AWTRectangle( GetBoundingBox() );
     618           0 :     awt::Rectangle rect = AWTRectangle( GetBoundingBox() );
     619           0 :     rect.X = rect.X + mrParentWindow.GetClientWindowExtentsRelative(NULL).Left()-mrParentWindow.GetWindowExtentsRelative(NULL).Left();
     620           0 :     rect.Y = rect.Y + mrParentWindow.GetClientWindowExtentsRelative(NULL).Top()-mrParentWindow.GetWindowExtentsRelative(NULL).Top();
     621           0 :     return rect;
     622             :     // End
     623             : }
     624             : 
     625           0 : awt::Point SAL_CALL SvxPixelCtlAccessibleChild::getLocation() throw( RuntimeException, std::exception )
     626             : {
     627             :     // no guard -> done in getBoundingBox()
     628           0 :     return AWTPoint( GetBoundingBox().TopLeft() );
     629             : }
     630             : 
     631           0 : awt::Point SAL_CALL SvxPixelCtlAccessibleChild::getLocationOnScreen() throw( RuntimeException, std::exception )
     632             : {
     633             :     // no guard -> done in getBoundingBoxOnScreen()
     634           0 :     return AWTPoint( GetBoundingBoxOnScreen().TopLeft() );
     635             : }
     636             : 
     637           0 : awt::Size SAL_CALL SvxPixelCtlAccessibleChild::getSize() throw( RuntimeException, std::exception )
     638             : {
     639             :     // no guard -> done in getBoundingBox()
     640           0 :     return AWTSize( GetBoundingBox().GetSize() );
     641             : }
     642             : 
     643           0 : void SAL_CALL SvxPixelCtlAccessibleChild::grabFocus() throw( RuntimeException, std::exception )
     644             : {
     645           0 : }
     646             : 
     647           0 : sal_Int32 SvxPixelCtlAccessibleChild::getForeground(  )
     648             :         throw (::com::sun::star::uno::RuntimeException, std::exception)
     649             : {
     650             :     //::vos::OGuard       aSolarGuard( Application::GetSolarMutex() );
     651           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     652           0 :     ThrowExceptionIfNotAlive();
     653           0 :     return mrParentWindow.GetControlForeground().GetColor();
     654             : }
     655           0 : sal_Int32 SvxPixelCtlAccessibleChild::getBackground(  )
     656             :         throw (::com::sun::star::uno::RuntimeException, std::exception)
     657             : {
     658             :     //::vos::OGuard       aSolarGuard( Application::GetSolarMutex() );
     659           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     660             : 
     661           0 :     ThrowExceptionIfNotAlive();
     662           0 :     return mrParentWindow.GetControlBackground().GetColor();
     663             : }
     664             : 
     665             : //=====  XAccessibleContext  ==================================================
     666             : 
     667           0 : sal_Int32 SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleChildCount( void ) throw( RuntimeException, std::exception )
     668             : {
     669           0 :     return 0;
     670             : }
     671             : 
     672           0 : uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleChild( sal_Int32 )
     673             :     throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
     674             : {
     675           0 :     throw lang::IndexOutOfBoundsException();
     676             : }
     677             : 
     678           0 : uno::Reference< XAccessible > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleParent( void ) throw( RuntimeException, std::exception )
     679             : {
     680           0 :     return mxParent;
     681             : }
     682             : 
     683           0 : sal_Int32 SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleIndexInParent( void ) throw( RuntimeException, std::exception )
     684             : {
     685           0 :    return mnIndexInParent;
     686             : }
     687             : 
     688           0 : sal_Int16 SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleRole( void ) throw( RuntimeException, std::exception )
     689             : {
     690           0 :     return AccessibleRole::CHECK_BOX;
     691             : }
     692             : 
     693           0 : OUString SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleDescription( void ) throw( RuntimeException, std::exception )
     694             : {
     695           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     696             : 
     697           0 :     return  GetName();
     698             : }
     699             : 
     700           0 : OUString SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleName( void ) throw( RuntimeException, std::exception )
     701             : {
     702           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     703           0 :     return  GetName();
     704             : }
     705             : 
     706             : /** Return empty uno::Reference to indicate that the relation set is not
     707             :     supported.
     708             : */
     709           0 : uno::Reference<XAccessibleRelationSet> SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleRelationSet( void ) throw( RuntimeException, std::exception )
     710             : {
     711           0 :     return uno::Reference< XAccessibleRelationSet >();
     712             : }
     713             : 
     714           0 : uno::Reference< XAccessibleStateSet > SAL_CALL SvxPixelCtlAccessibleChild::getAccessibleStateSet( void ) throw( RuntimeException, std::exception )
     715             : {
     716           0 :     ::osl::MutexGuard                       aGuard( m_aMutex );
     717           0 :     utl::AccessibleStateSetHelper*          pStateSetHelper = new utl::AccessibleStateSetHelper;
     718             : 
     719           0 :     if( IsAlive() )
     720             :     {
     721             : 
     722           0 :         pStateSetHelper->AddState( AccessibleStateType::TRANSIENT );
     723           0 :         pStateSetHelper->AddState( AccessibleStateType::ENABLED );
     724           0 :         pStateSetHelper->AddState( AccessibleStateType::OPAQUE );
     725           0 :         pStateSetHelper->AddState( AccessibleStateType::SELECTABLE );
     726           0 :         pStateSetHelper->AddState( AccessibleStateType::SHOWING );
     727           0 :         pStateSetHelper->AddState( AccessibleStateType::VISIBLE );
     728             : 
     729           0 :         long nIndex = mrParentWindow.GetFoucsPosIndex();
     730           0 :         if ( nIndex == mnIndexInParent)
     731             :         {
     732           0 :             pStateSetHelper->AddState( AccessibleStateType::SELECTED );
     733             :         }
     734           0 :         if (mrParentWindow.GetBitmapPixel(sal_uInt16(mnIndexInParent)))
     735             :         {
     736           0 :             pStateSetHelper->AddState( AccessibleStateType::CHECKED );
     737             :         }
     738             :     }
     739             :     else
     740           0 :         pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
     741             : 
     742           0 :     return pStateSetHelper;
     743             : }
     744             : 
     745           0 : lang::Locale SAL_CALL SvxPixelCtlAccessibleChild::getLocale( void ) throw( IllegalAccessibleComponentStateException, RuntimeException, std::exception )
     746             : {
     747           0 :     ::osl::MutexGuard                       aGuard( m_aMutex );
     748           0 :     if( mxParent.is() )
     749             :     {
     750           0 :         uno::Reference< XAccessibleContext >        xParentContext( mxParent->getAccessibleContext() );
     751           0 :         if( xParentContext.is() )
     752           0 :             return xParentContext->getLocale();
     753             :     }
     754             : 
     755             :     //  No locale and no parent.  Therefore throw exception to indicate this
     756             :     //  cluelessness.
     757           0 :     throw IllegalAccessibleComponentStateException();
     758             : }
     759             : 
     760           0 : void SAL_CALL SvxPixelCtlAccessibleChild::addAccessibleEventListener( const uno::Reference< XAccessibleEventListener >& xListener )
     761             :     throw( RuntimeException, std::exception )
     762             : {
     763           0 :     if (xListener.is())
     764             :     {
     765           0 :         ::osl::MutexGuard   aGuard( m_aMutex );
     766           0 :         if (!mnClientId)
     767           0 :             mnClientId = comphelper::AccessibleEventNotifier::registerClient( );
     768           0 :         comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener );
     769             :     }
     770           0 : }
     771             : 
     772           0 : void SAL_CALL SvxPixelCtlAccessibleChild::removeAccessibleEventListener( const uno::Reference< XAccessibleEventListener >& xListener )
     773             :     throw( RuntimeException, std::exception )
     774             : {
     775           0 :     if (xListener.is())
     776             :     {
     777           0 :         ::osl::MutexGuard   aGuard( m_aMutex );
     778             : 
     779           0 :         sal_Int32 nListenerCount = comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener );
     780           0 :         if ( !nListenerCount )
     781             :         {
     782             :             // no listeners anymore
     783             :             // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
     784             :             // and at least to us not firing any events anymore, in case somebody calls
     785             :             // NotifyAccessibleEvent, again
     786           0 :             comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
     787           0 :             mnClientId = 0;
     788           0 :         }
     789             :     }
     790           0 : }
     791             : 
     792             : 
     793             : //=====  XServiceInfo  ========================================================
     794           0 : OUString SAL_CALL SvxPixelCtlAccessibleChild::getImplementationName( void ) throw( RuntimeException, std::exception )
     795             : {
     796           0 :     return OUString( RTL_CONSTASCII_USTRINGPARAM( "SvxPixelCtlAccessibleChild" ) );
     797             : }
     798             : 
     799           0 : sal_Bool SAL_CALL SvxPixelCtlAccessibleChild::supportsService( const OUString& rServiceName ) throw( RuntimeException, std::exception )
     800             : {
     801           0 :     return cppu::supportsService( this, rServiceName );
     802             : }
     803             : 
     804           0 : Sequence< OUString > SAL_CALL SvxPixelCtlAccessibleChild::getSupportedServiceNames( void ) throw( RuntimeException, std::exception )
     805             : {
     806           0 :     uno::Sequence< OUString > aRet(3);
     807           0 :     OUString* pArray = aRet.getArray();
     808           0 :     pArray[0] = "Accessible";
     809           0 :     pArray[1] = "AccessibleContext";
     810           0 :     pArray[2] = "AccessibleComponent";
     811           0 :     return aRet;
     812             : }
     813             : 
     814             : //=====  internal  ============================================================
     815             : 
     816           0 : void SvxPixelCtlAccessibleChild::CommitChange( const AccessibleEventObject& rEvent )
     817             : {
     818           0 :     if (mnClientId)
     819           0 :         comphelper::AccessibleEventNotifier::addEvent( mnClientId, rEvent );
     820           0 : }
     821             : 
     822           0 : void SAL_CALL SvxPixelCtlAccessibleChild::disposing()
     823             : {
     824           0 :     if( !rBHelper.bDisposed )
     825             :     {
     826           0 :         ::osl::MutexGuard   aGuard( m_aMutex );
     827             : 
     828             :         // Send a disposing to all listeners.
     829           0 :         if ( mnClientId )
     830             :         {
     831           0 :             comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
     832           0 :             mnClientId =  0;
     833             :         }
     834             : 
     835           0 :         mxParent = uno::Reference< XAccessible >();
     836             : 
     837           0 :         delete mpBoundingBox;
     838             :     }
     839           0 : }
     840             : 
     841           0 : void SvxPixelCtlAccessibleChild::ThrowExceptionIfNotAlive( void ) throw( lang::DisposedException )
     842             : {
     843           0 :     if( IsNotAlive() )
     844           0 :         throw lang::DisposedException();
     845           0 : }
     846             : 
     847           0 : Rectangle SvxPixelCtlAccessibleChild::GetBoundingBoxOnScreen( void ) throw( RuntimeException )
     848             : {
     849           0 :     ::osl::MutexGuard   aGuard( m_aMutex );
     850             : 
     851             :     // no ThrowExceptionIfNotAlive() because its done in GetBoundingBox()
     852           0 :     Rectangle           aRect( GetBoundingBox() );
     853             : 
     854           0 :     return Rectangle( mrParentWindow.OutputToAbsoluteScreenPixel( aRect.TopLeft() ), aRect.GetSize() );
     855             : }
     856             : 
     857           0 : Rectangle SvxPixelCtlAccessibleChild::GetBoundingBox( void ) throw( RuntimeException )
     858             : {
     859             :     // no guard necessary, because no one changes mpBoundingBox after creating it
     860           0 :     ThrowExceptionIfNotAlive();
     861             : 
     862           0 :     return *mpBoundingBox;
     863             : }
     864             : 
     865           0 : OUString SvxPixelCtlAccessibleChild::GetName()
     866             : {
     867           0 :     sal_Int32 nXIndex = mnIndexInParent % mrParentWindow.GetLineCount();
     868           0 :     sal_Int32 nYIndex = mnIndexInParent / mrParentWindow.GetLineCount();
     869             : 
     870           0 :     OUString str;
     871           0 :     str += "(";
     872           0 :     str += OUString::number(nXIndex);
     873           0 :     str += ",";
     874           0 :     str += OUString::number(nYIndex);
     875           0 :     str += ")";
     876           0 :     return str;
     877           0 : }
     878             : 
     879             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10