diff options
Diffstat (limited to 'chart2/source/controller/accessibility/AccessibleChartElement.cxx')
-rw-r--r-- | chart2/source/controller/accessibility/AccessibleChartElement.cxx | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/chart2/source/controller/accessibility/AccessibleChartElement.cxx b/chart2/source/controller/accessibility/AccessibleChartElement.cxx new file mode 100644 index 000000000000..2361cc62c389 --- /dev/null +++ b/chart2/source/controller/accessibility/AccessibleChartElement.cxx @@ -0,0 +1,332 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_chart2.hxx" + +#include "AccessibleChartElement.hxx" +#include "CharacterProperties.hxx" +#include "ObjectIdentifier.hxx" +#include "ObjectNameProvider.hxx" +#include "servicenames.hxx" +#include "macros.hxx" + +#include <com/sun/star/awt/XDevice.hpp> +#include <com/sun/star/chart2/XTitle.hpp> +#include <com/sun/star/beans/XMultiPropertySet.hpp> +#include <com/sun/star/accessibility/AccessibleStateType.hpp> +#include <com/sun/star/lang/XInitialization.hpp> + +// for SolarMutex +#include <vcl/svapp.hxx> +#include <rtl/ustrbuf.hxx> + +// #ifndef _RTL_UUID_H_ +// #include <rtl/uuid.h> +// #endif +// #ifndef _CPPUHELPER_QUERYINTERFACE_HXX_ +// #include <cppuhelper/queryinterface.hxx> +// #endif +// #ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_ +// #include <toolkit/helper/vclunohelper.hxx> +// #endif +// #ifndef _SV_WINDOW_HXX +// #include <vcl/window.hxx> +// #endif + +// #ifndef _SVX_ACCESSILE_TEXT_HELPER_HXX_ +// #include <svx/AccessibleTextHelper.hxx> +// #endif + +using namespace ::com::sun::star; +using namespace ::com::sun::star::accessibility; + +using ::com::sun::star::uno::UNO_QUERY; +using ::rtl::OUString; +using ::rtl::OUStringBuffer; +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Sequence; +using ::osl::MutexGuard; +using ::osl::ClearableMutexGuard; +using ::osl::ResettableMutexGuard; +using ::com::sun::star::uno::RuntimeException; +using ::com::sun::star::uno::Any; + +namespace chart +{ + +AccessibleChartElement::AccessibleChartElement( + const AccessibleElementInfo & rAccInfo, + bool bMayHaveChildren, + bool bAlwaysTransparent /* default: false */ ) : + impl::AccessibleChartElement_Base( rAccInfo, bMayHaveChildren, bAlwaysTransparent ), + m_bHasText( false ) +{ + AddState( AccessibleStateType::TRANSIENT ); +} + +AccessibleChartElement::~AccessibleChartElement() +{ + OSL_ASSERT( CheckDisposeState( false /* don't throw exceptions */ ) ); +} + +// ________ protected ________ + +bool AccessibleChartElement::ImplUpdateChildren() +{ + bool bResult = false; + Reference< chart2::XTitle > xTitle( + ObjectIdentifier::getObjectPropertySet( + GetInfo().m_aOID.getObjectCID(), Reference< chart2::XChartDocument >( GetInfo().m_xChartDocument )), + uno::UNO_QUERY ); + m_bHasText = xTitle.is(); + + if( m_bHasText ) + { + InitTextEdit(); + bResult = true; + } + else + bResult = AccessibleBase::ImplUpdateChildren(); + + return bResult; +} + +void AccessibleChartElement::InitTextEdit() +{ + if( ! m_xTextHelper.is()) + { + // get hard reference + Reference< view::XSelectionSupplier > xSelSupp( GetInfo().m_xSelectionSupplier ); + // get factory from selection supplier (controller) + Reference< lang::XMultiServiceFactory > xFact( xSelSupp, uno::UNO_QUERY ); + if( xFact.is()) + { + m_xTextHelper.set( + xFact->createInstance( CHART_ACCESSIBLE_TEXT_SERVICE_NAME ), uno::UNO_QUERY ); + } + } + + if( m_xTextHelper.is()) + try + { + Reference< lang::XInitialization > xInit( m_xTextHelper, uno::UNO_QUERY_THROW ); + Sequence< uno::Any > aArgs( 3 ); + aArgs[0] <<= GetInfo().m_aOID.getObjectCID(); + aArgs[1] <<= Reference< XAccessible >( this ); + aArgs[2] <<= Reference< awt::XWindow >( GetInfo().m_xWindow ); + xInit->initialize( aArgs ); + } + catch( const uno::Exception & ex ) + { + ASSERT_EXCEPTION( ex ); + } +} +// OSL_ASSERT( m_pTextHelper == 0 ); + +// // /-- solar +// ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); +// Window* pWindow( VCLUnoHelper::GetWindow( GetInfo().m_xWindow )); +// if( pWindow ) +// { +// // we need ChartController::m_pDrawViewWrapper here +// SdrView * pView = 0; +// if( pView ) +// { +// SdrObject * pTextObj = m_pDrawViewWrapper->getTextEditObject(); +// if( pTextObj ) +// { +// SvxEditSource * pEditSource = new SvxEditSource( pTextObj, pView, pWindow ); +// m_pTextHelper = new ::accessibility::AccessibleTextHelper( +// ::std::auto_ptr< SvxEditSource >( pEditSource )); +// if( m_pTextHelper ) +// m_pTextHelper->SetEventSource( this ); +// } +// } +// } +// // \-- solar +// } + +// ____________________________________ +// ____________________________________ +// +// Interfaces +// ____________________________________ +// ____________________________________ + +// ________ AccessibleBase::XAccessibleContext ________ +Reference< XAccessible > AccessibleChartElement::ImplGetAccessibleChildById( sal_Int32 i ) const + throw (lang::IndexOutOfBoundsException, RuntimeException) +{ + Reference< XAccessible > xResult; + + if( m_bHasText ) + { + xResult.set( m_xTextHelper->getAccessibleChild( i )); + // /-- solar +// ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); +// if( m_pTextHelper ) +// xResult.set( m_pTextHelper->GetChild( i ) ); + // \-- solar + } + else + xResult.set( AccessibleBase::ImplGetAccessibleChildById( i )); + + return xResult; +} + +sal_Int32 AccessibleChartElement::ImplGetAccessibleChildCount() const + throw (RuntimeException) +{ + if( m_bHasText ) + { + if( m_xTextHelper.is()) + return m_xTextHelper->getAccessibleChildCount(); + return 0; + } + + return AccessibleBase::ImplGetAccessibleChildCount(); +} + +// ________ XServiceInfo ________ +OUString SAL_CALL AccessibleChartElement::getImplementationName() + throw (RuntimeException) +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM( "AccessibleChartElement" )); +} + +// ________ AccessibleChartElement::XAccessibleContext (overloaded) ________ +OUString SAL_CALL AccessibleChartElement::getAccessibleName() + throw (::com::sun::star::uno::RuntimeException) +{ + return ObjectNameProvider::getNameForCID( + GetInfo().m_aOID.getObjectCID(), GetInfo().m_xChartDocument ); +} + +// ________ AccessibleChartElement::XAccessibleContext (overloaded) ________ +OUString SAL_CALL AccessibleChartElement::getAccessibleDescription() + throw (::com::sun::star::uno::RuntimeException) +{ + return getToolTipText(); +} + +// ________ AccessibleChartElement::XAccessibleExtendedComponent ________ +Reference< awt::XFont > SAL_CALL AccessibleChartElement::getFont() + throw (uno::RuntimeException) +{ + CheckDisposeState(); + + Reference< awt::XFont > xFont; + // using assignment for broken gcc 3.3 + Reference< awt::XDevice > xDevice = Reference< awt::XDevice >( + Reference< awt::XWindow >( GetInfo().m_xWindow ), uno::UNO_QUERY ); + + if( xDevice.is()) + { + Reference< beans::XMultiPropertySet > xObjProp( + ObjectIdentifier::getObjectPropertySet( + GetInfo().m_aOID.getObjectCID(), Reference< chart2::XChartDocument >( GetInfo().m_xChartDocument )), uno::UNO_QUERY ); + awt::FontDescriptor aDescr( + CharacterProperties::createFontDescriptorFromPropertySet( xObjProp )); + xFont = xDevice->getFont( aDescr ); + } + + return xFont; +} + +OUString SAL_CALL AccessibleChartElement::getTitledBorderText() + throw (uno::RuntimeException) +{ + return OUString(); +} + +OUString SAL_CALL AccessibleChartElement::getToolTipText() + throw (::com::sun::star::uno::RuntimeException) +{ + CheckDisposeState(); + + return ObjectNameProvider::getHelpText( + GetInfo().m_aOID.getObjectCID(), Reference< chart2::XChartDocument >( GetInfo().m_xChartDocument )); +} + +// ________ XAccessibleComponent ________ +sal_Bool SAL_CALL AccessibleChartElement::containsPoint( const awt::Point& aPoint ) + throw (uno::RuntimeException) +{ + return AccessibleBase::containsPoint( aPoint ); +} + +Reference< XAccessible > SAL_CALL AccessibleChartElement::getAccessibleAtPoint( const awt::Point& aPoint ) + throw (uno::RuntimeException) +{ + return AccessibleBase::getAccessibleAtPoint( aPoint ); +} + +awt::Rectangle SAL_CALL AccessibleChartElement::getBounds() + throw (uno::RuntimeException) +{ + return AccessibleBase::getBounds(); +} + +awt::Point SAL_CALL AccessibleChartElement::getLocation() + throw (uno::RuntimeException) +{ + return AccessibleBase::getLocation(); +} + +awt::Point SAL_CALL AccessibleChartElement::getLocationOnScreen() + throw (uno::RuntimeException) +{ + return AccessibleBase::getLocationOnScreen(); +} + +awt::Size SAL_CALL AccessibleChartElement::getSize() + throw (uno::RuntimeException) +{ + return AccessibleBase::getSize(); +} + +void SAL_CALL AccessibleChartElement::grabFocus() + throw (uno::RuntimeException) +{ + return AccessibleBase::grabFocus(); +} + +sal_Int32 SAL_CALL AccessibleChartElement::getForeground() + throw (uno::RuntimeException) +{ + return AccessibleBase::getForeground(); +} + +sal_Int32 SAL_CALL AccessibleChartElement::getBackground() + throw (uno::RuntimeException) +{ + return AccessibleBase::getBackground(); +} + + +} // namespace chart |