LCOV - code coverage report
Current view: top level - svx/source/accessibility - charmapacc.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1 412 0.2 %
Date: 2014-11-03 Functions: 2 95 2.1 %
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 <unotools/accessiblestatesethelper.hxx>
      21             : #include <vcl/svapp.hxx>
      22             : #include <stdio.h>
      23             : #include <svx/charmap.hxx>
      24             : #include "charmapacc.hxx"
      25             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      26             : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
      27             : #include <toolkit/helper/externallock.hxx>
      28             : #include <toolkit/helper/convert.hxx>
      29             : #include <osl/interlck.h>
      30             : #include <svx/dialmgr.hxx>
      31             : #include "accessibility.hrc"
      32             : #include <comphelper/types.hxx>
      33             : 
      34             : namespace svx
      35             : {
      36             :     using namespace comphelper;
      37             :     using namespace ::com::sun::star;
      38             :     using namespace ::com::sun::star::uno;
      39             :     using namespace ::com::sun::star::lang;
      40             :     using namespace ::com::sun::star::accessibility;
      41             : 
      42             : 
      43             : // - SvxShowCharSetVirtualAcc -
      44             : 
      45           0 : SvxShowCharSetVirtualAcc::SvxShowCharSetVirtualAcc( SvxShowCharSet* pParent ) : OAccessibleComponentHelper(new VCLExternalSolarLock())
      46             : ,mpParent( pParent )
      47           0 : ,m_pTable(NULL)
      48             : {
      49           0 :     osl_atomic_increment(&m_refCount);
      50             :     {
      51           0 :         lateInit(this);
      52             :     }
      53           0 :     osl_atomic_decrement(&m_refCount);
      54           0 : }
      55             : 
      56             : 
      57             : 
      58           0 : SvxShowCharSetVirtualAcc::~SvxShowCharSetVirtualAcc()
      59             : {
      60           0 :     ensureDisposed();
      61           0 :     delete getExternalLock();
      62           0 : }
      63             : 
      64           0 : IMPLEMENT_FORWARD_XINTERFACE2( SvxShowCharSetVirtualAcc, OAccessibleComponentHelper, OAccessibleHelper_Base_2 )
      65           0 : IMPLEMENT_FORWARD_XTYPEPROVIDER2( SvxShowCharSetVirtualAcc, OAccessibleComponentHelper, OAccessibleHelper_Base_2 )
      66             : 
      67           0 : void SAL_CALL SvxShowCharSetVirtualAcc::fireEvent(
      68             :                     const sal_Int16 _nEventId,
      69             :                     const ::com::sun::star::uno::Any& _rOldValue,
      70             :                     const ::com::sun::star::uno::Any& _rNewValue
      71             :                 )
      72             : {
      73           0 :     if ( m_pTable )
      74           0 :         m_pTable->fireEvent(_nEventId,_rOldValue,_rNewValue);
      75           0 : }
      76             : 
      77           0 : sal_Int32 SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleChildCount(  ) throw (RuntimeException, std::exception)
      78             : {
      79           0 :     OExternalLockGuard aGuard( this );
      80           0 :     ensureAlive();
      81           0 :     return ( mpParent->getScrollBar().IsVisible() ) ? 2 : 1;
      82             : }
      83             : 
      84           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleAtPoint( const awt::Point& aPoint )
      85             :     throw (uno::RuntimeException, std::exception)
      86             : {
      87           0 :     OExternalLockGuard aGuard( this );
      88           0 :     ensureAlive();
      89             : 
      90           0 :     uno::Reference< css::accessibility::XAccessible >    xRet;
      91           0 :     const sal_uInt16 nItemId = sal::static_int_cast<sal_uInt16>(mpParent->PixelToMapIndex( Point( aPoint.X, aPoint.Y ) ));
      92             : 
      93           0 :     if( sal_uInt16(-1) != nItemId )
      94             :     {
      95           0 :         if ( !m_pTable )
      96           0 :             m_pTable = new SvxShowCharSetAcc(this);
      97           0 :         xRet = m_pTable;
      98             :     }
      99           0 :     else if ( mpParent->getScrollBar().IsVisible() )
     100             :     {
     101           0 :         const Point aOutPos( mpParent->getScrollBar().GetPosPixel() );
     102           0 :         const Size  aScrollBar = mpParent->getScrollBar().GetOutputSizePixel();
     103           0 :         Rectangle aRect(aOutPos,aScrollBar);
     104             : 
     105           0 :         if ( aRect.IsInside(VCLPoint(aPoint)) )
     106           0 :             xRet = mpParent->getScrollBar().GetAccessible();
     107             :     }
     108           0 :     return xRet;
     109             : }
     110             : 
     111           0 : uno::Any SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleKeyBinding()
     112             :     throw (uno::RuntimeException)
     113             : {
     114           0 :     return uno::Any();
     115             : }
     116             : 
     117           0 : void SAL_CALL SvxShowCharSetVirtualAcc::grabFocus()
     118             :     throw (uno::RuntimeException, std::exception)
     119             : {
     120           0 :     OExternalLockGuard aGuard( this );
     121           0 :     ensureAlive();
     122           0 :     mpParent->GrabFocus();
     123           0 : }
     124             : 
     125             : 
     126             : 
     127           0 : Reference< XAccessible > SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     128             : {
     129           0 :     OExternalLockGuard aGuard( this );
     130           0 :     ensureAlive();
     131           0 :     if ( mpParent->getScrollBar().IsVisible() && i == 0 )
     132           0 :         return mpParent->getScrollBar().GetAccessible();
     133           0 :     else if ( i == 1 )
     134             :     {
     135           0 :         if ( !m_xAcc.is() )
     136             :         {
     137           0 :             m_pTable = new SvxShowCharSetAcc(this);
     138           0 :             m_xAcc = m_pTable;
     139             :         }
     140             :     }
     141             :     else
     142           0 :         throw IndexOutOfBoundsException();
     143           0 :     return m_xAcc;
     144             : }
     145             : 
     146           0 : Reference< XAccessible > SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleParent(  ) throw (RuntimeException, std::exception)
     147             : {
     148           0 :     OExternalLockGuard aGuard( this );
     149           0 :     ensureAlive();
     150           0 :     vcl::Window*                                         pParent = mpParent->GetParent();
     151           0 :     uno::Reference< css::accessibility::XAccessible >    xRet;
     152             : 
     153           0 :     if ( pParent )
     154           0 :         xRet = pParent->GetAccessible();
     155             : 
     156           0 :     return xRet;
     157             : }
     158             : 
     159           0 : ::com::sun::star::awt::Rectangle SvxShowCharSetVirtualAcc::implGetBounds(  ) throw (RuntimeException)
     160             : {
     161           0 :     ::com::sun::star::awt::Rectangle aBounds ( 0, 0, 0, 0 );
     162           0 :     vcl::Window* pWindow = mpParent;
     163           0 :     if ( pWindow )
     164             :     {
     165           0 :         Rectangle aRect = pWindow->GetWindowExtentsRelative( NULL );
     166           0 :         aBounds = AWTRectangle( aRect );
     167           0 :         vcl::Window* pParent = pWindow->GetAccessibleParentWindow();
     168           0 :         if ( pParent )
     169             :         {
     170           0 :             Rectangle aParentRect = pParent->GetWindowExtentsRelative( NULL );
     171           0 :             ::com::sun::star::awt::Point aParentScreenLoc = AWTPoint( aParentRect.TopLeft() );
     172           0 :             aBounds.X -= aParentScreenLoc.X;
     173           0 :             aBounds.Y -= aParentScreenLoc.Y;
     174             :         }
     175             :     }
     176           0 :     return aBounds;
     177             : }
     178             : 
     179           0 : sal_Int16 SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleRole(  ) throw (RuntimeException, std::exception)
     180             : {
     181           0 :     return css::accessibility::AccessibleRole::SCROLL_PANE;
     182             : }
     183             : 
     184           0 : OUString SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleDescription(  ) throw (RuntimeException, std::exception)
     185             : {
     186           0 :     OExternalLockGuard aGuard( this );
     187           0 :     return SVX_RESSTR( RID_SVXSTR_CHARACTER_SELECTION);
     188             : }
     189             : 
     190           0 : OUString SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleName(  ) throw (RuntimeException, std::exception)
     191             : {
     192           0 :     OExternalLockGuard aGuard( this );
     193           0 :     return SVX_RESSTR( RID_SVXSTR_CHAR_SEL_DESC);
     194             : }
     195             : 
     196           0 : Reference< XAccessibleRelationSet > SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleRelationSet(  ) throw (RuntimeException, std::exception)
     197             : {
     198           0 :     return Reference< XAccessibleRelationSet >();
     199             : }
     200             : 
     201           0 : Reference< XAccessibleStateSet > SAL_CALL SvxShowCharSetVirtualAcc::getAccessibleStateSet(  ) throw (RuntimeException, std::exception)
     202             : {
     203           0 :     OExternalLockGuard aGuard( this );
     204             : 
     205           0 :     ::utl::AccessibleStateSetHelper*    pStateSet = new ::utl::AccessibleStateSetHelper;
     206             : 
     207           0 :     if( mpParent )
     208             :     {
     209             :         // SELECTABLE
     210           0 :         pStateSet->AddState( AccessibleStateType::FOCUSABLE );
     211           0 :         if ( mpParent->HasFocus() )
     212           0 :             pStateSet->AddState( AccessibleStateType::FOCUSED );
     213           0 :         if ( mpParent->IsActive() )
     214           0 :             pStateSet->AddState( AccessibleStateType::ACTIVE );
     215           0 :         if ( mpParent->IsEnabled() )
     216             :         {
     217           0 :             pStateSet->AddState( AccessibleStateType::ENABLED );
     218           0 :             pStateSet->AddState( AccessibleStateType::SENSITIVE );
     219             :         }
     220           0 :         if ( mpParent->IsReallyVisible() )
     221           0 :             pStateSet->AddState( AccessibleStateType::VISIBLE );
     222             :     }
     223             : 
     224           0 :     return pStateSet;
     225             : }
     226             : 
     227           0 : void SAL_CALL SvxShowCharSetVirtualAcc::disposing()
     228             : {
     229           0 :     OAccessibleContextHelper::disposing();
     230           0 :     if ( m_pTable )
     231           0 :         m_pTable->dispose();
     232           0 :     m_pTable = NULL;
     233           0 : }
     234             : 
     235             : 
     236             : // - SvxShowCharSetItem -
     237             : 
     238             : 
     239           0 : SvxShowCharSetItem::SvxShowCharSetItem( SvxShowCharSet& rParent,SvxShowCharSetAcc*  _pParent,sal_uInt16 _nPos ) :
     240             :     mrParent( rParent )
     241             :     ,mnId( _nPos )
     242             :     ,m_pItem(NULL)
     243           0 :     ,m_pParent(_pParent)
     244             : {
     245           0 : }
     246             : 
     247             : 
     248           0 : SvxShowCharSetItem::~SvxShowCharSetItem()
     249             : {
     250           0 :     if ( m_xAcc.is() )
     251             :     {
     252           0 :         m_pItem->ParentDestroyed();
     253           0 :         ClearAccessible();
     254             :     }
     255           0 : }
     256             : 
     257             : 
     258             : 
     259           0 : uno::Reference< css::accessibility::XAccessible > SvxShowCharSetItem::GetAccessible()
     260             : {
     261           0 :     if( !m_xAcc.is() )
     262             :     {
     263           0 :         m_pItem = new SvxShowCharSetItemAcc( this );
     264           0 :         m_xAcc = m_pItem;
     265             :     }
     266             : 
     267           0 :     return m_xAcc;
     268             : }
     269             : 
     270             : 
     271             : 
     272           0 : void SvxShowCharSetItem::ClearAccessible()
     273             : {
     274           0 :     if ( m_xAcc.is() )
     275             :     {
     276           0 :         m_pItem = NULL;
     277           0 :         m_xAcc  = NULL;
     278             :     }
     279           0 : }
     280             : 
     281             : 
     282             : 
     283             : // - SvxShowCharSetAcc -
     284             : 
     285             : 
     286           0 : SvxShowCharSetAcc::SvxShowCharSetAcc( SvxShowCharSetVirtualAcc* _pParent ) : OAccessibleSelectionHelper(new VCLExternalSolarLock())
     287           0 :   ,m_pParent( _pParent )
     288             : {
     289           0 :     osl_atomic_increment(&m_refCount);
     290             :     {
     291           0 :         lateInit(this);
     292             :     }
     293           0 :     osl_atomic_decrement(&m_refCount);
     294           0 : }
     295             : 
     296             : 
     297             : 
     298           0 : SvxShowCharSetAcc::~SvxShowCharSetAcc()
     299             : {
     300           0 :     ensureDisposed();
     301           0 :     delete getExternalLock();
     302           0 : }
     303             : 
     304           0 : void SAL_CALL SvxShowCharSetAcc::disposing()
     305             : {
     306           0 :     OAccessibleSelectionHelper::disposing();
     307           0 :     ::std::vector< Reference< XAccessible > >::iterator aIter = m_aChildren.begin();
     308           0 :     ::std::vector< Reference< XAccessible > >::iterator aEnd  = m_aChildren.end();
     309           0 :     for (;aIter != aEnd ; ++aIter)
     310           0 :         ::comphelper::disposeComponent(*aIter);
     311             : 
     312           0 :     m_aChildren.clear();
     313           0 :     m_pParent = NULL;
     314           0 : }
     315             : 
     316             : 
     317           0 : IMPLEMENT_FORWARD_XINTERFACE2( SvxShowCharSetAcc, OAccessibleSelectionHelper, OAccessibleHelper_Base )
     318           0 : IMPLEMENT_FORWARD_XTYPEPROVIDER2( SvxShowCharSetAcc, OAccessibleSelectionHelper, OAccessibleHelper_Base )
     319             : 
     320           0 : bool SvxShowCharSetAcc::implIsSelected( sal_Int32 nAccessibleChildIndex ) throw (RuntimeException)
     321             : {
     322           0 :     return m_pParent && m_pParent->getCharSetControl()->IsSelected(
     323           0 :         sal::static_int_cast<sal_uInt16>(nAccessibleChildIndex));
     324             : }
     325             : 
     326             :         // select the specified child => watch for special ChildIndexes (ACCESSIBLE_SELECTION_CHILD_xxx)
     327           0 : void SvxShowCharSetAcc::implSelect(sal_Int32 nAccessibleChildIndex, bool bSelect)
     328             :     throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     329             : {
     330           0 :     if ( m_pParent )
     331             :     {
     332           0 :         if ( bSelect )
     333           0 :             m_pParent->getCharSetControl()->SelectIndex(nAccessibleChildIndex, true);
     334             :         else
     335           0 :             m_pParent->getCharSetControl()->DeSelect();
     336             :     }
     337           0 : }
     338             : 
     339           0 : ::com::sun::star::awt::Rectangle SvxShowCharSetAcc::implGetBounds(  ) throw (RuntimeException)
     340             : {
     341           0 :     const Point   aOutPos;//( m_pParent->getCharSetControl()->GetPosPixel() );
     342           0 :     Size          aOutSize( m_pParent->getCharSetControl()->GetOutputSizePixel());
     343           0 :     if ( m_pParent->getCharSetControl()->getScrollBar().IsVisible() )
     344             :     {
     345           0 :         const Size aScrollBar = m_pParent->getCharSetControl()->getScrollBar().GetOutputSizePixel();
     346           0 :         aOutSize.Width() -= aScrollBar.Width();
     347             :     }
     348             : 
     349           0 :     awt::Rectangle aRet;
     350             : 
     351           0 :     aRet.X = aOutPos.X();
     352           0 :     aRet.Y = aOutPos.Y();
     353           0 :     aRet.Width = aOutSize.Width();
     354           0 :     aRet.Height = aOutSize.Height();
     355             : 
     356           0 :     return aRet;
     357             : }
     358             : 
     359           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleChildCount()
     360             :     throw (uno::RuntimeException, std::exception)
     361             : {
     362           0 :     OExternalLockGuard aGuard( this );
     363           0 :     ensureAlive();
     364           0 :     return m_pParent->getCharSetControl()->getMaxCharCount();
     365             : }
     366             : 
     367             : 
     368             : 
     369           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetAcc::getAccessibleChild( sal_Int32 i )
     370             :     throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
     371             : {
     372           0 :     OExternalLockGuard aGuard( this );
     373           0 :     ensureAlive();
     374           0 :     uno::Reference< css::accessibility::XAccessible >    xRet;
     375           0 :     SvxShowCharSetItem* pItem = m_pParent->getCharSetControl()->ImplGetItem( static_cast< sal_uInt16 >( i ) );
     376             : 
     377           0 :     if( pItem )
     378             :     {
     379           0 :         pItem->m_pParent = this;
     380           0 :         xRet = pItem->GetAccessible();
     381           0 :         m_aChildren.push_back(xRet);
     382             :     }
     383             :     else
     384           0 :         throw lang::IndexOutOfBoundsException();
     385             : 
     386           0 :     return xRet;
     387             : }
     388             : 
     389             : 
     390             : 
     391           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetAcc::getAccessibleParent()
     392             :     throw (uno::RuntimeException, std::exception)
     393             : {
     394           0 :     OExternalLockGuard aGuard( this );
     395           0 :     ensureAlive();
     396           0 :     return m_pParent;
     397             : }
     398             : 
     399             : 
     400             : 
     401           0 : sal_Int16 SAL_CALL SvxShowCharSetAcc::getAccessibleRole()
     402             :     throw (uno::RuntimeException, std::exception)
     403             : {
     404           0 :     return css::accessibility::AccessibleRole::TABLE;
     405             : }
     406             : 
     407             : 
     408             : 
     409           0 : OUString SAL_CALL SvxShowCharSetAcc::getAccessibleDescription()
     410             :     throw (uno::RuntimeException, std::exception)
     411             : {
     412           0 :     OExternalLockGuard aGuard( this );
     413           0 :     return SVX_RESSTR( RID_SVXSTR_CHARACTER_SELECTION );
     414             : }
     415             : 
     416             : 
     417             : 
     418           0 : OUString SAL_CALL SvxShowCharSetAcc::getAccessibleName()
     419             :     throw (uno::RuntimeException, std::exception)
     420             : {
     421           0 :     OExternalLockGuard aGuard( this );
     422           0 :     ensureAlive();
     423           0 :     return SVX_RESSTR( RID_SVXSTR_CHAR_SEL_DESC );
     424             : }
     425             : 
     426             : 
     427             : 
     428           0 : uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL SvxShowCharSetAcc::getAccessibleRelationSet()
     429             :     throw (uno::RuntimeException, std::exception)
     430             : {
     431           0 :     return uno::Reference< css::accessibility::XAccessibleRelationSet >();
     432             : }
     433             : 
     434             : 
     435             : 
     436           0 : uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL SvxShowCharSetAcc::getAccessibleStateSet()
     437             :     throw (uno::RuntimeException, std::exception)
     438             : {
     439           0 :     OExternalLockGuard aGuard( this );
     440             : 
     441           0 :     ::utl::AccessibleStateSetHelper*    pStateSet = new ::utl::AccessibleStateSetHelper;
     442             : 
     443           0 :     if( m_pParent->getCharSetControl() )
     444             :     {
     445             :         // SELECTABLE
     446           0 :         pStateSet->AddState( AccessibleStateType::FOCUSABLE );
     447           0 :         if ( m_pParent->getCharSetControl()->HasFocus() )
     448           0 :             pStateSet->AddState( AccessibleStateType::FOCUSED );
     449           0 :         if ( m_pParent->getCharSetControl()->IsActive() )
     450           0 :             pStateSet->AddState( AccessibleStateType::ACTIVE );
     451           0 :         if ( m_pParent->getCharSetControl()->IsEnabled() )
     452             :         {
     453           0 :             pStateSet->AddState( AccessibleStateType::ENABLED );
     454           0 :             pStateSet->AddState( AccessibleStateType::SENSITIVE );
     455             :         }
     456           0 :         if ( m_pParent->getCharSetControl()->IsReallyVisible() )
     457           0 :             pStateSet->AddState( AccessibleStateType::VISIBLE );
     458             : 
     459           0 :         pStateSet->AddState( AccessibleStateType::MANAGES_DESCENDANTS );
     460             :     }
     461             : 
     462           0 :     return pStateSet;
     463             : }
     464             : 
     465             : 
     466           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetAcc::getAccessibleAtPoint( const awt::Point& aPoint )
     467             :     throw (uno::RuntimeException, std::exception)
     468             : {
     469           0 :     OExternalLockGuard aGuard( this );
     470           0 :     ensureAlive();
     471             : 
     472           0 :     uno::Reference< css::accessibility::XAccessible >    xRet;
     473             :     const sal_uInt16 nItemId = sal::static_int_cast<sal_uInt16>(
     474           0 :         m_pParent->getCharSetControl()->PixelToMapIndex( Point( aPoint.X, aPoint.Y ) ));
     475             : 
     476           0 :     if( sal_uInt16(-1) != nItemId )
     477             :     {
     478           0 :         SvxShowCharSetItem* pItem = m_pParent->getCharSetControl()->ImplGetItem( nItemId );
     479           0 :         xRet = pItem->GetAccessible();
     480             :     }
     481           0 :     return xRet;
     482             : }
     483             : 
     484             : 
     485             : 
     486             : 
     487           0 : void SAL_CALL SvxShowCharSetAcc::grabFocus()
     488             :     throw (uno::RuntimeException, std::exception)
     489             : {
     490           0 :     OExternalLockGuard aGuard( this );
     491           0 :     ensureAlive();
     492           0 :     m_pParent->getCharSetControl()->GrabFocus();
     493           0 : }
     494             : 
     495             : 
     496             : 
     497           0 : uno::Any SAL_CALL SvxShowCharSetAcc::getAccessibleKeyBinding()
     498             :     throw (uno::RuntimeException)
     499             : {
     500           0 :     return uno::Any();
     501             : }
     502             : 
     503           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleRowCount(  ) throw (RuntimeException, std::exception)
     504             : {
     505           0 :     return ((getAccessibleChildCount()-1) / COLUMN_COUNT) + 1;
     506             : }
     507             : 
     508           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleColumnCount(  ) throw (RuntimeException, std::exception)
     509             : {
     510           0 :     return COLUMN_COUNT;
     511             : }
     512             : 
     513           0 : OUString SAL_CALL SvxShowCharSetAcc::getAccessibleRowDescription( sal_Int32 /*nRow*/ ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     514             : {
     515           0 :     return OUString();
     516             : }
     517             : 
     518           0 : OUString SAL_CALL SvxShowCharSetAcc::getAccessibleColumnDescription( sal_Int32 /*nColumn*/ ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     519             : {
     520           0 :     return OUString();
     521             : }
     522             : 
     523           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleRowExtentAt( sal_Int32 /*nRow*/, sal_Int32 /*nColumn*/ ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     524             : {
     525           0 :     return 1;
     526             : }
     527             : 
     528           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleColumnExtentAt( sal_Int32 /*nRow*/, sal_Int32 /*nColumn*/ ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     529             : {
     530           0 :     return 1;
     531             : }
     532             : 
     533           0 : Reference< XAccessibleTable > SAL_CALL SvxShowCharSetAcc::getAccessibleRowHeaders(  ) throw (RuntimeException, std::exception)
     534             : {
     535           0 :     return Reference< XAccessibleTable >();
     536             : }
     537             : 
     538           0 : Reference< XAccessibleTable > SAL_CALL SvxShowCharSetAcc::getAccessibleColumnHeaders(  ) throw (RuntimeException, std::exception)
     539             : {
     540           0 :     return Reference< XAccessibleTable >();
     541             : }
     542             : 
     543           0 : Sequence< sal_Int32 > SAL_CALL SvxShowCharSetAcc::getSelectedAccessibleRows(  ) throw (RuntimeException, std::exception)
     544             : {
     545           0 :     OExternalLockGuard aGuard( this );
     546           0 :     ensureAlive();
     547           0 :     Sequence< sal_Int32 > aSel(1);
     548           0 :     aSel[0] = m_pParent->getCharSetControl()->GetRowPos(m_pParent->getCharSetControl()->GetSelectIndexId());
     549           0 :     return aSel;
     550             : }
     551             : 
     552           0 : Sequence< sal_Int32 > SAL_CALL SvxShowCharSetAcc::getSelectedAccessibleColumns(  ) throw (RuntimeException, std::exception)
     553             : {
     554           0 :     OExternalLockGuard aGuard( this );
     555           0 :     ensureAlive();
     556           0 :     Sequence< sal_Int32 > aSel(1);
     557           0 :     aSel[0] = m_pParent->getCharSetControl()->GetColumnPos(m_pParent->getCharSetControl()->GetSelectIndexId());
     558           0 :     return aSel;
     559             : }
     560             : 
     561           0 : sal_Bool SAL_CALL SvxShowCharSetAcc::isAccessibleRowSelected( sal_Int32 nRow ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     562             : {
     563           0 :     OExternalLockGuard aGuard( this );
     564           0 :     ensureAlive();
     565           0 :     return m_pParent->getCharSetControl()->GetRowPos(m_pParent->getCharSetControl()->GetSelectIndexId()) == nRow;
     566             : }
     567             : 
     568           0 : sal_Bool SAL_CALL SvxShowCharSetAcc::isAccessibleColumnSelected( sal_Int32 nColumn ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     569             : {
     570           0 :     OExternalLockGuard aGuard( this );
     571           0 :     ensureAlive();
     572           0 :     return m_pParent->getCharSetControl()->GetColumnPos(m_pParent->getCharSetControl()->GetSelectIndexId()) == nColumn;
     573             : }
     574             : 
     575           0 : Reference< XAccessible > SAL_CALL SvxShowCharSetAcc::getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     576             : {
     577           0 :     OExternalLockGuard aGuard( this );
     578           0 :     ensureAlive();
     579             :     ::svx::SvxShowCharSetItem* pItem = m_pParent->getCharSetControl()->ImplGetItem(
     580           0 :         sal::static_int_cast<sal_uInt16>(getAccessibleIndex(nRow,nColumn) ));
     581           0 :     if ( !pItem  )
     582           0 :         throw IndexOutOfBoundsException();
     583           0 :     return pItem->GetAccessible();
     584             : }
     585             : 
     586           0 : Reference< XAccessible > SAL_CALL SvxShowCharSetAcc::getAccessibleCaption(  ) throw (RuntimeException, std::exception)
     587             : {
     588           0 :     return Reference< XAccessible >();
     589             : }
     590             : 
     591           0 : Reference< XAccessible > SAL_CALL SvxShowCharSetAcc::getAccessibleSummary(  ) throw (RuntimeException, std::exception)
     592             : {
     593           0 :     return Reference< XAccessible >();
     594             : }
     595             : 
     596           0 : sal_Bool SAL_CALL SvxShowCharSetAcc::isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     597             : {
     598           0 :     OExternalLockGuard aGuard( this );
     599           0 :     ensureAlive();
     600           0 :     return m_pParent->getCharSetControl()->GetSelectIndexId() == getAccessibleIndex(nRow,nColumn);
     601             : }
     602             : 
     603           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     604             : {
     605           0 :     return (nRow*COLUMN_COUNT) + nColumn;
     606             : }
     607             : 
     608           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleRow( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     609             : {
     610           0 :     OExternalLockGuard aGuard( this );
     611           0 :     ensureAlive();
     612           0 :     return m_pParent->getCharSetControl()->GetRowPos(sal::static_int_cast<sal_uInt16>(nChildIndex));
     613             : }
     614             : 
     615           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getAccessibleColumn( sal_Int32 nChildIndex ) throw (IndexOutOfBoundsException, RuntimeException, std::exception)
     616             : {
     617           0 :     OExternalLockGuard aGuard( this );
     618           0 :     ensureAlive();
     619           0 :     return m_pParent->getCharSetControl()->GetColumnPos(sal::static_int_cast<sal_uInt16>(nChildIndex));
     620             : }
     621             : 
     622             : 
     623             : 
     624             : 
     625             : // - SvxShowCharSetItemAcc -
     626             : 
     627             : 
     628           0 : SvxShowCharSetItemAcc::SvxShowCharSetItemAcc( SvxShowCharSetItem* pParent ) : OAccessibleComponentHelper(new VCLExternalSolarLock())
     629           0 : ,mpParent( pParent )
     630             : {
     631             :     OSL_ENSURE(pParent,"NO parent supplied!");
     632           0 :     osl_atomic_increment(&m_refCount);
     633             :     { // #b6211265 #
     634           0 :         lateInit(this);
     635             :     }
     636           0 :     osl_atomic_decrement(&m_refCount);
     637           0 : }
     638             : 
     639             : 
     640             : 
     641           0 : SvxShowCharSetItemAcc::~SvxShowCharSetItemAcc()
     642             : {
     643           0 :     ensureDisposed();
     644           0 :     delete getExternalLock();
     645           0 : }
     646             : 
     647           0 : IMPLEMENT_FORWARD_XINTERFACE2( SvxShowCharSetItemAcc, OAccessibleComponentHelper, OAccessibleHelper_Base_2 )
     648           0 : IMPLEMENT_FORWARD_XTYPEPROVIDER2( SvxShowCharSetItemAcc, OAccessibleComponentHelper, OAccessibleHelper_Base_2 )
     649             : 
     650             : 
     651           0 : void SvxShowCharSetItemAcc::ParentDestroyed()
     652             : {
     653           0 :     const ::osl::MutexGuard aGuard( GetMutex() );
     654           0 :     mpParent = NULL;
     655           0 : }
     656             : 
     657             : 
     658             : 
     659           0 : sal_Int32 SAL_CALL SvxShowCharSetItemAcc::getAccessibleChildCount()
     660             :     throw (uno::RuntimeException, std::exception)
     661             : {
     662           0 :     return 0;
     663             : }
     664             : 
     665             : 
     666             : 
     667           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetItemAcc::getAccessibleChild( sal_Int32 /*i*/ )
     668             :     throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
     669             : {
     670           0 :     throw lang::IndexOutOfBoundsException();
     671             : }
     672             : 
     673             : 
     674             : 
     675           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetItemAcc::getAccessibleParent()
     676             :     throw (uno::RuntimeException, std::exception)
     677             : {
     678           0 :     OExternalLockGuard aGuard( this );
     679           0 :     ensureAlive();
     680           0 :     return mpParent->m_pParent;
     681             : }
     682             : 
     683             : 
     684             : 
     685           0 : sal_Int16 SAL_CALL SvxShowCharSetItemAcc::getAccessibleRole()
     686             :     throw (uno::RuntimeException, std::exception)
     687             : {
     688           0 :     return css::accessibility::AccessibleRole::TABLE_CELL;
     689             : }
     690             : 
     691             : 
     692             : 
     693           0 : OUString SAL_CALL SvxShowCharSetItemAcc::getAccessibleDescription()
     694             :     throw (uno::RuntimeException, std::exception)
     695             : {
     696           0 :     OExternalLockGuard aGuard( this );
     697           0 :     ensureAlive();
     698           0 :     OUString sDescription = SVX_RESSTR( RID_SVXSTR_CHARACTER_CODE );
     699             : 
     700           0 :     const OUString aCharStr( mpParent->maText);
     701           0 :     sal_Int32 nStrIndex = 0;
     702           0 :     const sal_UCS4 c = aCharStr.iterateCodePoints( &nStrIndex );
     703           0 :     const int tmp_len = (c < 0x10000) ? 4 : 6;
     704           0 :     char buf[16] = "0x0000";
     705           0 :     sal_UCS4 c_Shifted = c;
     706           0 :     for( int i = 0; i < tmp_len; ++i )
     707             :     {
     708           0 :         char h = (char)(c_Shifted & 0x0F);
     709           0 :         buf[tmp_len+1-i] = (h > 9) ? (h - 10 + 'A') : (h + '0');
     710           0 :         c_Shifted >>= 4;
     711             :     }
     712           0 :     if( c < 256 )
     713           0 :         snprintf( buf+6, 10, " (%" SAL_PRIuUINT32 ")", c );
     714           0 :     sDescription += " " + OUString(buf, strlen(buf), RTL_TEXTENCODING_ASCII_US);
     715             : 
     716           0 :     return sDescription;
     717             : }
     718             : 
     719             : 
     720             : 
     721           0 : OUString SAL_CALL SvxShowCharSetItemAcc::getAccessibleName()
     722             :     throw (uno::RuntimeException, std::exception)
     723             : {
     724           0 :     OExternalLockGuard aGuard( this );
     725           0 :     ensureAlive();
     726           0 :     OUString aRet;
     727             : 
     728           0 :     if( mpParent )
     729             :     {
     730           0 :         aRet = mpParent->maText;
     731             : 
     732           0 :         if (aRet.isEmpty())
     733           0 :             aRet = getAccessibleDescription();
     734             :     }
     735             : 
     736           0 :     return aRet;
     737             : }
     738             : 
     739             : 
     740             : 
     741           0 : uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL SvxShowCharSetItemAcc::getAccessibleRelationSet()
     742             :     throw (uno::RuntimeException, std::exception)
     743             : {
     744           0 :     return uno::Reference< css::accessibility::XAccessibleRelationSet >();
     745             : }
     746             : 
     747             : 
     748             : 
     749           0 : uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL SvxShowCharSetItemAcc::getAccessibleStateSet()
     750             :     throw (uno::RuntimeException, std::exception)
     751             : {
     752           0 :     OExternalLockGuard aGuard( this );
     753           0 :     ensureAlive();
     754             : 
     755           0 :     ::utl::AccessibleStateSetHelper*    pStateSet = new ::utl::AccessibleStateSetHelper;
     756             : 
     757           0 :     if( mpParent )
     758             :     {
     759           0 :         if (mpParent->mrParent.IsEnabled())
     760             :         {
     761           0 :             pStateSet->AddState( css::accessibility::AccessibleStateType::ENABLED );
     762             :             // SELECTABLE
     763           0 :             pStateSet->AddState( css::accessibility::AccessibleStateType::SELECTABLE );
     764           0 :             pStateSet->AddState( css::accessibility::AccessibleStateType::FOCUSABLE );
     765             :         }
     766             : 
     767             :         // SELECTED
     768           0 :         if( mpParent->mrParent.GetSelectIndexId() == mpParent->mnId )
     769             :         {
     770           0 :             pStateSet->AddState( css::accessibility::AccessibleStateType::SELECTED );
     771           0 :                pStateSet->AddState( css::accessibility::AccessibleStateType::FOCUSED );
     772             :         }
     773           0 :         if ( mpParent->mnId >= mpParent->mrParent.FirstInView() && mpParent->mnId <= mpParent->mrParent.LastInView() )
     774             :         {
     775           0 :             pStateSet->AddState( AccessibleStateType::VISIBLE );
     776           0 :             pStateSet->AddState( AccessibleStateType::SHOWING );
     777             :         }
     778           0 :         pStateSet->AddState( AccessibleStateType::TRANSIENT );
     779             :     }
     780             : 
     781           0 :     return pStateSet;
     782             : }
     783             : 
     784             : 
     785           0 : void SAL_CALL SvxShowCharSetItemAcc::grabFocus()
     786             :     throw (uno::RuntimeException, std::exception)
     787             : {
     788             :     // nothing to do
     789           0 : }
     790             : 
     791             : 
     792             : 
     793           0 : uno::Any SAL_CALL SvxShowCharSetItemAcc::getAccessibleKeyBinding()
     794             :     throw (uno::RuntimeException)
     795             : {
     796           0 :     return uno::Any();
     797             : }
     798             : 
     799           0 : awt::Rectangle SvxShowCharSetItemAcc::implGetBounds(  ) throw (RuntimeException)
     800             : {
     801           0 :     awt::Rectangle      aRet;
     802             : 
     803           0 :     if( mpParent )
     804             :     {
     805           0 :         Rectangle   aRect( mpParent->maRect );
     806           0 :         Point       aOrigin;
     807           0 :         Rectangle   aParentRect( aOrigin, mpParent->mrParent.GetOutputSizePixel() );
     808             : 
     809           0 :         aRect.Intersection( aParentRect );
     810             : 
     811           0 :         aRet.X = aRect.Left();
     812           0 :         aRet.Y = aRect.Top();
     813           0 :         aRet.Width = aRect.GetWidth();
     814           0 :         aRet.Height = aRect.GetHeight();
     815             :     }
     816             : 
     817           0 :     return aRet;
     818             : }
     819             : 
     820           0 : uno::Reference< css::accessibility::XAccessible > SAL_CALL SvxShowCharSetItemAcc::getAccessibleAtPoint( const awt::Point& /*aPoint*/ )
     821             :     throw (uno::RuntimeException, std::exception)
     822             : {
     823           0 :     return uno::Reference< css::accessibility::XAccessible >();
     824             : }
     825             : 
     826           0 : sal_Int32 SAL_CALL SvxShowCharSetVirtualAcc::getForeground(  ) throw (RuntimeException, std::exception)
     827             : {
     828           0 :     OExternalLockGuard aGuard( this );
     829             : 
     830           0 :     sal_Int32 nColor = 0;
     831           0 :     if ( mpParent )
     832             :     {
     833           0 :         if ( mpParent->IsControlForeground() )
     834           0 :             nColor = mpParent->GetControlForeground().GetColor();
     835             :         else
     836             :         {
     837           0 :             vcl::Font aFont;
     838           0 :             if ( mpParent->IsControlFont() )
     839           0 :                 aFont = mpParent->GetControlFont();
     840             :             else
     841           0 :                 aFont = mpParent->GetFont();
     842           0 :             nColor = aFont.GetColor().GetColor();
     843             :         }
     844             :     }
     845             : 
     846           0 :     return nColor;
     847             : }
     848             : 
     849           0 : sal_Int32 SAL_CALL SvxShowCharSetVirtualAcc::getBackground(  ) throw (RuntimeException, std::exception)
     850             : {
     851           0 :     OExternalLockGuard aGuard( this  );
     852           0 :     sal_Int32 nColor = 0;
     853           0 :     if ( mpParent )
     854             :     {
     855           0 :         if ( mpParent->IsControlBackground() )
     856           0 :             nColor = mpParent->GetControlBackground().GetColor();
     857             :         else
     858           0 :             nColor = mpParent->GetBackground().GetColor().GetColor();
     859             :     }
     860             : 
     861           0 :     return nColor;
     862             : }
     863             : 
     864           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getForeground(  ) throw (RuntimeException, std::exception)
     865             : {
     866           0 :     OExternalLockGuard aGuard( this );
     867             : 
     868           0 :     sal_Int32 nColor = 0;
     869           0 :     if ( m_pParent )
     870           0 :         nColor = m_pParent->getForeground();
     871           0 :     return nColor;
     872             : }
     873             : 
     874           0 : sal_Int32 SAL_CALL SvxShowCharSetAcc::getBackground(  ) throw (RuntimeException, std::exception)
     875             : {
     876           0 :     OExternalLockGuard aGuard( this  );
     877           0 :     sal_Int32 nColor = 0;
     878           0 :     if ( m_pParent )
     879           0 :         nColor = m_pParent->getBackground();
     880           0 :     return nColor;
     881             : }
     882             : 
     883             : 
     884             : 
     885         594 : } // namespace svx
     886             : 
     887             : 
     888             : 
     889             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10