2010-10-14 08:27:31 +02:00
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2012-06-29 14:02:24 +01:00
/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2.0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice :
*
* Licensed to the Apache Software Foundation ( ASF ) under one or more
* contributor license agreements . See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership . The ASF licenses this file to you under the Apache
* License , Version 2.0 ( the " License " ) ; you may not use this file
* except in compliance with the License . You may obtain a copy of
* the License at http : //www.apache.org/licenses/LICENSE-2.0 .
*/
2002-04-17 07:39:28 +00:00
# include <comphelper/accimplaccess.hxx>
2003-04-24 16:28:13 +00:00
# include <com/sun/star/accessibility/XAccessible.hpp>
# include <com/sun/star/accessibility/XAccessibleContext.hpp>
2002-04-17 07:39:28 +00:00
# include <cppuhelper/typeprovider.hxx>
# include <set>
2012-08-25 10:59:00 +02:00
# include <string.h>
2002-04-17 07:39:28 +00:00
//.........................................................................
namespace comphelper
{
//.........................................................................
using : : com : : sun : : star : : uno : : Reference ;
using : : com : : sun : : star : : uno : : Sequence ;
using : : com : : sun : : star : : uno : : Exception ;
using : : com : : sun : : star : : uno : : UNO_QUERY ;
using : : com : : sun : : star : : uno : : RuntimeException ;
using : : com : : sun : : star : : lang : : XUnoTunnel ;
2003-04-24 16:28:13 +00:00
using : : com : : sun : : star : : accessibility : : XAccessible ;
using : : com : : sun : : star : : accessibility : : XAccessibleContext ;
2002-04-17 07:39:28 +00:00
//=====================================================================
//= OAccImpl_Impl
//=====================================================================
struct OAccImpl_Impl
{
Reference < XAccessible > m_xAccParent ;
sal_Int64 m_nForeignControlledStates ;
} ;
//=====================================================================
//= OAccessibleImplementationAccess
//=====================================================================
2014-02-22 21:20:15 +01:00
2002-04-17 07:39:28 +00:00
OAccessibleImplementationAccess : : OAccessibleImplementationAccess ( )
: m_pImpl ( new OAccImpl_Impl )
{
}
2014-02-22 21:20:15 +01:00
2002-04-17 07:39:28 +00:00
OAccessibleImplementationAccess : : ~ OAccessibleImplementationAccess ( )
{
delete m_pImpl ;
m_pImpl = NULL ;
}
2014-02-22 21:20:15 +01:00
2002-04-26 04:54:25 +00:00
Reference < XAccessible > OAccessibleImplementationAccess : : implGetForeignControlledParent ( ) const
2002-04-17 07:39:28 +00:00
{
return m_pImpl - > m_xAccParent ;
}
2014-02-22 21:20:15 +01:00
2002-04-17 07:39:28 +00:00
void OAccessibleImplementationAccess : : setAccessibleParent ( const Reference < XAccessible > & _rxAccParent )
{
m_pImpl - > m_xAccParent = _rxAccParent ;
}
2014-02-22 21:20:15 +01:00
2002-04-23 10:03:40 +00:00
sal_Int64 OAccessibleImplementationAccess : : implGetForeignControlledStates ( ) const
{
return m_pImpl - > m_nForeignControlledStates ;
}
2014-02-22 21:20:15 +01:00
2002-04-17 07:39:28 +00:00
void OAccessibleImplementationAccess : : setStateBit ( const sal_Int16 _nState , const sal_Bool _bSet )
{
2013-03-27 12:55:05 +01:00
OSL_ENSURE ( _nState > = 0 & & static_cast < sal_uInt16 > ( _nState ) < sizeof ( sal_Int64 ) * 8 , " OAccessibleImplementationAccess::setStateBit: no more bits (shutting down the universe now)! " ) ;
2002-04-17 07:39:28 +00:00
sal_uInt64 nBitMask ( 1 ) ;
nBitMask < < = _nState ;
if ( _bSet )
m_pImpl - > m_nForeignControlledStates | = nBitMask ;
else
m_pImpl - > m_nForeignControlledStates & = ~ nBitMask ;
}
2011-04-02 16:47:11 +01:00
namespace { struct lcl_ImplId : public rtl : : Static < : : cppu : : OImplementationId , lcl_ImplId > { } ; }
2014-02-22 21:20:15 +01:00
2011-04-02 16:47:11 +01:00
const Sequence < sal_Int8 > OAccessibleImplementationAccess : : getUnoTunnelImplementationId ( )
2002-04-17 07:39:28 +00:00
{
2011-04-02 16:47:11 +01:00
: : cppu : : OImplementationId & rID = lcl_ImplId : : get ( ) ;
return rID . getImplementationId ( ) ;
2002-04-17 07:39:28 +00:00
}
2014-02-22 21:20:15 +01:00
2002-04-17 07:39:28 +00:00
sal_Int64 SAL_CALL OAccessibleImplementationAccess : : getSomething ( const Sequence < sal_Int8 > & _rIdentifier ) throw ( RuntimeException )
{
sal_Int64 nReturn ( 0 ) ;
if ( ( _rIdentifier . getLength ( ) = = 16 )
2012-08-25 10:59:00 +02:00
& & ( 0 = = memcmp ( getUnoTunnelImplementationId ( ) . getConstArray ( ) , _rIdentifier . getConstArray ( ) , 16 ) )
2002-04-17 07:39:28 +00:00
)
nReturn = reinterpret_cast < sal_Int64 > ( this ) ;
return nReturn ;
}
2014-02-22 21:20:15 +01:00
2002-04-17 07:39:28 +00:00
OAccessibleImplementationAccess * OAccessibleImplementationAccess : : getImplementation ( const Reference < XAccessibleContext > & _rxComponent )
{
OAccessibleImplementationAccess * pImplementation = NULL ;
try
{
Reference < XUnoTunnel > xTunnel ( _rxComponent , UNO_QUERY ) ;
if ( xTunnel . is ( ) )
{
pImplementation = reinterpret_cast < OAccessibleImplementationAccess * > (
xTunnel - > getSomething ( getUnoTunnelImplementationId ( ) ) ) ;
}
}
catch ( const Exception & )
{
2011-03-19 14:11:09 +01:00
OSL_FAIL ( " OAccessibleImplementationAccess::setAccessibleParent: caught an exception while retrieving the implementation! " ) ;
2002-04-17 07:39:28 +00:00
}
return pImplementation ;
}
2014-02-22 21:20:15 +01:00
2014-02-16 22:51:15 +01:00
bool OAccessibleImplementationAccess : : setAccessibleParent (
2002-04-17 07:39:28 +00:00
const Reference < XAccessibleContext > & _rxComponent , const Reference < XAccessible > & _rxNewParent )
{
OAccessibleImplementationAccess * pImplementation = getImplementation ( _rxComponent ) ;
if ( pImplementation )
pImplementation - > setAccessibleParent ( _rxNewParent ) ;
return ( NULL ! = pImplementation ) ;
}
//.........................................................................
} // namespace comphelper
//.........................................................................
2010-10-14 08:27:31 +02:00
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */