diff options
author | Michael Weghorn <m.weghorn@posteo.de> | 2024-12-04 15:48:51 +0100 |
---|---|---|
committer | Michael Weghorn <m.weghorn@posteo.de> | 2024-12-04 20:47:30 +0100 |
commit | 739b0716504d2526fb7283100420e4bd5eacb7c2 (patch) | |
tree | 3e1281c0c74ffa5a25267e1a8b953df762c364bb /accessibility/source | |
parent | 3d780e72b93773a25f796feb488b0fd878c490b5 (diff) |
a11y: Move menu a11y classes to vcl, no more use factory
Other than most of the a11y implementations for vcl
classes, VCLXAccessiblePopupMenu etc. do not
make use of any VCLXWindow (i.e. UNO/toolkit wrapper of a
vcl::Window) and thus do not depend on the toolkit
module, which the accessibility module depends on.
Therefore, there's also no need to use the accessible
factory to create them (which is needed when toolkit
classes are involved to avoid a dependency cycle).
Move those classes from the accessibility module to
vcl and add a new method Menu::CreateAccessible and
move the logic from AccessibleFactory::createAccessible
there. Drop the now unnecessary factory methods
previously used for those classes.
No change in behavior intended (yet), but this
also simplifies the code involved for the
tdf#164093 scenario.
Change-Id: Ie3f6f1a02bf6662206d31383473cdc868e1f9164
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177812
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Diffstat (limited to 'accessibility/source')
9 files changed, 0 insertions, 2644 deletions
diff --git a/accessibility/source/helper/acc_factory.cxx b/accessibility/source/helper/acc_factory.cxx index d95d47b214d9..191cc7528703 100644 --- a/accessibility/source/helper/acc_factory.cxx +++ b/accessibility/source/helper/acc_factory.cxx @@ -42,8 +42,6 @@ #include <standard/vclxaccessiblestatusbar.hxx> #include <standard/vclxaccessibletabcontrol.hxx> #include <standard/vclxaccessibletabpagewindow.hxx> -#include <standard/vclxaccessiblemenubar.hxx> -#include <standard/vclxaccessiblepopupmenu.hxx> #include <extended/accessibletablistbox.hxx> #include <extended/AccessibleBrowseBox.hxx> #include <extended/accessibleiconchoicectrl.hxx> @@ -115,8 +113,6 @@ public: createAccessibleContext( SVTXNumericField* _pXWindow ) override; virtual css::uno::Reference< css::accessibility::XAccessibleContext > createAccessibleContext( VCLXWindow* _pXWindow ) override; - virtual css::uno::Reference< css::accessibility::XAccessible > - createAccessible( Menu* _pMenu, bool _bIsMenuBar ) override; // ::vcl::IAccessibleFactory virtual vcl::IAccessibleTabListBox* @@ -224,17 +220,6 @@ AccessibleFactory::~AccessibleFactory() { } -Reference< XAccessible > AccessibleFactory::createAccessible( Menu* _pMenu, bool _bIsMenuBar ) -{ - rtl::Reference<OAccessibleMenuBaseComponent> pAccessible; - if ( _bIsMenuBar ) - pAccessible = new VCLXAccessibleMenuBar( _pMenu ); - else - pAccessible = new VCLXAccessiblePopupMenu( _pMenu ); - pAccessible->SetStates(); - return pAccessible; -} - Reference< XAccessibleContext > AccessibleFactory::createAccessibleContext( VCLXButton* _pXWindow ) { return new VCLXAccessibleButton( _pXWindow ); diff --git a/accessibility/source/standard/accessiblemenubasecomponent.cxx b/accessibility/source/standard/accessiblemenubasecomponent.cxx deleted file mode 100644 index dbedd1daff30..000000000000 --- a/accessibility/source/standard/accessiblemenubasecomponent.cxx +++ /dev/null @@ -1,674 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/accessiblemenubasecomponent.hxx> -#include <standard/vclxaccessiblemenu.hxx> -#include <standard/vclxaccessiblemenuitem.hxx> -#include <standard/vclxaccessiblemenuseparator.hxx> - -#include <com/sun/star/accessibility/AccessibleEventId.hpp> -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <com/sun/star/accessibility/AccessibleStateType.hpp> -#include <comphelper/accessiblecontexthelper.hxx> -#include <cppuhelper/supportsservice.hxx> -#include <o3tl/safeint.hxx> -#include <vcl/menu.hxx> -#include <vcl/unohelp.hxx> -#include <vcl/vclevent.hxx> - -#include <array> - -using namespace ::com::sun::star; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::accessibility; -using namespace ::comphelper; - - -// OAccessibleMenuBaseComponent - - -OAccessibleMenuBaseComponent::OAccessibleMenuBaseComponent( Menu* pMenu ) - :m_pMenu( pMenu ) - ,m_bEnabled( false ) - ,m_bFocused( false ) - ,m_bVisible( false ) - ,m_bSelected( false ) - ,m_bChecked( false ) -{ - if ( m_pMenu ) - { - m_aAccessibleChildren.assign( m_pMenu->GetItemCount(), rtl::Reference< OAccessibleMenuItemComponent >() ); - m_pMenu->AddEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) ); - } -} - - -OAccessibleMenuBaseComponent::~OAccessibleMenuBaseComponent() -{ - if ( m_pMenu ) - m_pMenu->RemoveEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) ); -} - - -bool OAccessibleMenuBaseComponent::IsEnabled() -{ - return false; -} - - -bool OAccessibleMenuBaseComponent::IsFocused() -{ - return false; -} - - -bool OAccessibleMenuBaseComponent::IsVisible() -{ - return false; -} - - -bool OAccessibleMenuBaseComponent::IsSelected() -{ - return false; -} - - -bool OAccessibleMenuBaseComponent::IsChecked() -{ - return false; -} - - -void OAccessibleMenuBaseComponent::SetStates() -{ - m_bEnabled = IsEnabled(); - m_bFocused = IsFocused(); - m_bVisible = IsVisible(); - m_bSelected = IsSelected(); - m_bChecked = IsChecked(); -} - - -void OAccessibleMenuBaseComponent::SetEnabled( bool bEnabled ) -{ - if ( m_bEnabled == bEnabled ) - return; - - sal_Int64 nStateType=AccessibleStateType::ENABLED; - if (IsMenuHideDisabledEntries()) - { - nStateType = AccessibleStateType::VISIBLE; - } - std::array<Any, 2> aOldValue, aNewValue; - if ( m_bEnabled ) - { - aOldValue[0] <<= AccessibleStateType::SENSITIVE; - aOldValue[1] <<= nStateType; - } - else - { - aNewValue[0] <<= nStateType; - aNewValue[1] <<= AccessibleStateType::SENSITIVE; - } - m_bEnabled = bEnabled; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[0], aNewValue[0] ); - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue[1], aNewValue[1] ); -} - - -void OAccessibleMenuBaseComponent::SetFocused( bool bFocused ) -{ - if ( m_bFocused != bFocused ) - { - Any aOldValue, aNewValue; - if ( m_bFocused ) - aOldValue <<= AccessibleStateType::FOCUSED; - else - aNewValue <<= AccessibleStateType::FOCUSED; - m_bFocused = bFocused; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); - } -} - - -void OAccessibleMenuBaseComponent::SetVisible( bool bVisible ) -{ - if ( m_bVisible != bVisible ) - { - Any aOldValue, aNewValue; - if ( m_bVisible ) - aOldValue <<= AccessibleStateType::VISIBLE; - else - aNewValue <<= AccessibleStateType::VISIBLE; - m_bVisible = bVisible; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); - } -} - - -void OAccessibleMenuBaseComponent::SetSelected( bool bSelected ) -{ - if ( m_bSelected != bSelected ) - { - Any aOldValue, aNewValue; - if ( m_bSelected ) - aOldValue <<= AccessibleStateType::SELECTED; - else - aNewValue <<= AccessibleStateType::SELECTED; - m_bSelected = bSelected; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); - } -} - - -void OAccessibleMenuBaseComponent::SetChecked( bool bChecked ) -{ - if ( m_bChecked != bChecked ) - { - Any aOldValue, aNewValue; - if ( m_bChecked ) - aOldValue <<= AccessibleStateType::CHECKED; - else - aNewValue <<= AccessibleStateType::CHECKED; - m_bChecked = bChecked; - NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue ); - } -} - - -void OAccessibleMenuBaseComponent::UpdateEnabled( sal_Int32 i, bool bEnabled ) -{ - if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) - { - rtl::Reference< OAccessibleMenuBaseComponent > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - xChild->SetEnabled( bEnabled ); - } -} - - -void OAccessibleMenuBaseComponent::UpdateFocused( sal_Int32 i, bool bFocused ) -{ - if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) - { - rtl::Reference< OAccessibleMenuBaseComponent > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - xChild->SetFocused( bFocused ); - } -} - - -void OAccessibleMenuBaseComponent::UpdateVisible() -{ - SetVisible( IsVisible() ); - for (const rtl::Reference<OAccessibleMenuItemComponent>& xChild : m_aAccessibleChildren) - { - if ( xChild.is() ) - xChild->SetVisible( xChild->IsVisible() ); - } -} - - -void OAccessibleMenuBaseComponent::UpdateSelected( sal_Int32 i, bool bSelected ) -{ - NotifyAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, Any(), Any() ); - - if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) - { - rtl::Reference< OAccessibleMenuBaseComponent > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - xChild->SetSelected( bSelected ); - } -} - - -void OAccessibleMenuBaseComponent::UpdateChecked( sal_Int32 i, bool bChecked ) -{ - if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) - { - rtl::Reference< OAccessibleMenuBaseComponent > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - xChild->SetChecked( bChecked ); - } -} - - -void OAccessibleMenuBaseComponent::UpdateAccessibleName( sal_Int32 i ) -{ - if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) - { - rtl::Reference< OAccessibleMenuBaseComponent > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - { - OAccessibleMenuItemComponent* pComp = static_cast< OAccessibleMenuItemComponent* >( xChild.get() ); - if ( pComp ) - pComp->SetAccessibleName( pComp->GetAccessibleName() ); - } - } -} - -void OAccessibleMenuBaseComponent::UpdateItemRole(sal_Int32 i) -{ - if (i < 0 || o3tl::make_unsigned(i) >= m_aAccessibleChildren.size()) - return; - - rtl::Reference<OAccessibleMenuItemComponent> xChild(m_aAccessibleChildren[i]); - if (!xChild.is()) - return; - - xChild->NotifyAccessibleEvent(AccessibleEventId::ROLE_CHANGED, Any(), Any()); -} - -void OAccessibleMenuBaseComponent::UpdateItemText( sal_Int32 i ) -{ - if ( i >= 0 && o3tl::make_unsigned(i) < m_aAccessibleChildren.size() ) - { - rtl::Reference< OAccessibleMenuItemComponent > xChild( m_aAccessibleChildren[i] ); - if ( xChild.is() ) - xChild->SetItemText( xChild->GetItemText() ); - } -} - - -sal_Int64 OAccessibleMenuBaseComponent::GetChildCount() const -{ - return m_aAccessibleChildren.size(); -} - - -Reference< XAccessible > OAccessibleMenuBaseComponent::GetChild( sal_Int64 i ) -{ - rtl::Reference< OAccessibleMenuItemComponent > xChild = m_aAccessibleChildren[i]; - if ( !xChild.is() ) - { - if ( m_pMenu ) - { - // create a new child - if ( m_pMenu->GetItemType( static_cast<sal_uInt16>(i) ) == MenuItemType::SEPARATOR ) - { - xChild = new VCLXAccessibleMenuSeparator(m_pMenu, static_cast<sal_uInt16>(i)); - } - else - { - PopupMenu* pPopupMenu = m_pMenu->GetPopupMenu( m_pMenu->GetItemId( static_cast<sal_uInt16>(i) ) ); - if ( pPopupMenu ) - { - xChild = new VCLXAccessibleMenu(m_pMenu, static_cast<sal_uInt16>(i), pPopupMenu); - pPopupMenu->SetAccessible(xChild); - } - else - { - xChild = new VCLXAccessibleMenuItem(m_pMenu, static_cast<sal_uInt16>(i)); - } - } - - // set states - xChild->SetStates(); - - // insert into menu item list - m_aAccessibleChildren[i] = xChild; - } - } - - return xChild; -} - - -Reference< XAccessible > OAccessibleMenuBaseComponent::GetChildAt( const awt::Point& rPoint ) -{ - for ( sal_Int64 i = 0, nCount = getAccessibleChildCount(); i < nCount; ++i ) - { - Reference< XAccessible > xAcc = getAccessibleChild( i ); - if ( xAcc.is() ) - { - Reference< XAccessibleComponent > xComp( xAcc->getAccessibleContext(), UNO_QUERY ); - if ( xComp.is() ) - { - tools::Rectangle aRect = vcl::unohelper::ConvertToVCLRect(xComp->getBounds()); - Point aPos = vcl::unohelper::ConvertToVCLPoint(rPoint); - if ( aRect.Contains( aPos ) ) - { - return xAcc; - } - } - } - } - - return nullptr; -} - - -void OAccessibleMenuBaseComponent::InsertChild( sal_Int32 i ) -{ - if ( i < 0 ) - return; - - if ( o3tl::make_unsigned(i) > m_aAccessibleChildren.size() ) - i = m_aAccessibleChildren.size(); - - // insert entry in child list - m_aAccessibleChildren.insert( m_aAccessibleChildren.begin() + i, rtl::Reference< OAccessibleMenuItemComponent >() ); - - // update item position of accessible children - for ( sal_uInt32 j = i, nCount = m_aAccessibleChildren.size(); j < nCount; ++j ) - { - rtl::Reference< OAccessibleMenuItemComponent > xAcc( m_aAccessibleChildren[j] ); - if ( xAcc.is() ) - xAcc->SetItemPos( static_cast<sal_uInt16>(j) ); - } - - // send accessible child event - Reference< XAccessible > xChild( GetChild( i ) ); - if ( xChild.is() ) - { - Any aOldValue, aNewValue; - aNewValue <<= xChild; - NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue ); - } -} - - -void OAccessibleMenuBaseComponent::RemoveChild( sal_Int32 i ) -{ - if ( i < 0 || o3tl::make_unsigned(i) >= m_aAccessibleChildren.size() ) - return; - - // keep the accessible of the removed item - rtl::Reference< OAccessibleMenuItemComponent > xChild( m_aAccessibleChildren[i] ); - - // remove entry in child list - m_aAccessibleChildren.erase( m_aAccessibleChildren.begin() + i ); - - // update item position of accessible children - for ( sal_uInt32 j = i, nCount = m_aAccessibleChildren.size(); j < nCount; ++j ) - { - rtl::Reference< OAccessibleMenuItemComponent > xAcc( m_aAccessibleChildren[j] ); - if ( xAcc.is() ) - xAcc->SetItemPos( static_cast<sal_uInt16>(j) ); - } - - // send accessible child event - if ( xChild.is() ) - { - Any aOldValue, aNewValue; - aOldValue <<= uno::Reference<XAccessible>(xChild); - NotifyAccessibleEvent( AccessibleEventId::CHILD, aOldValue, aNewValue ); - - xChild->dispose(); - } -} - - -bool OAccessibleMenuBaseComponent::IsHighlighted() -{ - return false; -} - - -bool OAccessibleMenuBaseComponent::IsChildHighlighted() -{ - bool bChildHighlighted = false; - - for (const rtl::Reference<OAccessibleMenuItemComponent>& xChild : m_aAccessibleChildren) - { - if ( xChild.is() && xChild->IsHighlighted() ) - { - bChildHighlighted = true; - break; - } - } - - return bChildHighlighted; -} - - -void OAccessibleMenuBaseComponent::SelectChild( sal_Int32 i ) -{ - // open the menu - if ( getAccessibleRole() == AccessibleRole::MENU && !IsPopupMenuOpen() ) - Click(); - - // highlight the child - if ( m_pMenu ) - m_pMenu->HighlightItem( static_cast<sal_uInt16>(i) ); -} - - -void OAccessibleMenuBaseComponent::DeSelectAll() -{ - if ( m_pMenu ) - m_pMenu->DeHighlight(); -} - - -bool OAccessibleMenuBaseComponent::IsChildSelected( sal_Int32 i ) -{ - bool bSelected = false; - - if ( m_pMenu && m_pMenu->IsHighlighted( static_cast<sal_uInt16>(i) ) ) - bSelected = true; - - return bSelected; -} - - -void OAccessibleMenuBaseComponent::Click() -{ -} - - -bool OAccessibleMenuBaseComponent::IsPopupMenuOpen() -{ - return false; -} - - -IMPL_LINK( OAccessibleMenuBaseComponent, MenuEventListener, VclMenuEvent&, rEvent, void ) -{ - OSL_ENSURE( rEvent.GetMenu(), "OAccessibleMenuBaseComponent - Menu?" ); - ProcessMenuEvent( rEvent ); -} - - -void OAccessibleMenuBaseComponent::ProcessMenuEvent( const VclMenuEvent& rVclMenuEvent ) -{ - sal_uInt16 nItemPos = rVclMenuEvent.GetItemPos(); - - switch ( rVclMenuEvent.GetId() ) - { - case VclEventId::MenuShow: - case VclEventId::MenuHide: - { - UpdateVisible(); - } - break; - case VclEventId::MenuHighlight: - { - SetFocused( false ); - UpdateFocused( nItemPos, true ); - UpdateSelected( nItemPos, true ); - } - break; - case VclEventId::MenuDehighlight: - { - UpdateFocused( nItemPos, false ); - UpdateSelected( nItemPos, false ); - } - break; - case VclEventId::MenuSubmenuActivate: - { - } - break; - case VclEventId::MenuSubmenuDeactivate: - { - UpdateFocused( nItemPos, true ); - } - break; - case VclEventId::MenuEnable: - { - UpdateEnabled( nItemPos, true ); - } - break; - case VclEventId::MenuDisable: - { - UpdateEnabled( nItemPos, false ); - } - break; - case VclEventId::MenuSubmenuChanged: - { - RemoveChild( nItemPos ); - InsertChild( nItemPos ); - } - break; - case VclEventId::MenuInsertItem: - { - InsertChild( nItemPos ); - } - break; - case VclEventId::MenuRemoveItem: - { - RemoveChild( nItemPos ); - } - break; - case VclEventId::MenuAccessibleNameChanged: - { - UpdateAccessibleName( nItemPos ); - } - break; - case VclEventId::MenuItemRoleChanged: - { - UpdateItemRole(nItemPos); - } - break; - case VclEventId::MenuItemTextChanged: - { - UpdateAccessibleName( nItemPos ); - UpdateItemText( nItemPos ); - } - break; - case VclEventId::MenuItemChecked: - { - UpdateChecked( nItemPos, true ); - } - break; - case VclEventId::MenuItemUnchecked: - { - UpdateChecked( nItemPos, false ); - } - break; - case VclEventId::ObjectDying: - { - if ( m_pMenu ) - { - m_pMenu->RemoveEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) ); - - m_pMenu = nullptr; - - // dispose all menu items - for (const rtl::Reference<OAccessibleMenuItemComponent>& xComponent : m_aAccessibleChildren) - { - if ( xComponent.is() ) - xComponent->dispose(); - } - m_aAccessibleChildren.clear(); - } - } - break; - default: - { - } - break; - } -} - - -// XComponent - - -void OAccessibleMenuBaseComponent::disposing() -{ - OAccessibleExtendedComponentHelper::disposing(); - - if ( !m_pMenu ) - return; - - m_pMenu->RemoveEventListener( LINK( this, OAccessibleMenuBaseComponent, MenuEventListener ) ); - - m_pMenu = nullptr; - - // dispose all menu items - for (const rtl::Reference<OAccessibleMenuItemComponent>& xComponent : m_aAccessibleChildren) - { - if ( xComponent.is() ) - xComponent->dispose(); - } - m_aAccessibleChildren.clear(); -} - - -// XServiceInfo - - -sal_Bool OAccessibleMenuBaseComponent::supportsService( const OUString& rServiceName ) -{ - return cppu::supportsService(this, rServiceName); -} - - -// XAccessible - - -Reference< XAccessibleContext > OAccessibleMenuBaseComponent::getAccessibleContext( ) -{ - OExternalLockGuard aGuard( this ); - - return this; -} - - -// XAccessibleContext - - -sal_Int64 OAccessibleMenuBaseComponent::getAccessibleStateSet( ) -{ - OExternalLockGuard aGuard( this ); - - sal_Int64 nStateSet = 0; - - if ( !rBHelper.bDisposed && !rBHelper.bInDispose ) - { - FillAccessibleStateSet( nStateSet ); - } - else - { - nStateSet |= AccessibleStateType::DEFUNC; - } - - return nStateSet; -} - - -bool OAccessibleMenuBaseComponent::IsMenuHideDisabledEntries() -{ - return false; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/accessiblemenucomponent.cxx b/accessibility/source/standard/accessiblemenucomponent.cxx deleted file mode 100644 index 7fe594721294..000000000000 --- a/accessibility/source/standard/accessiblemenucomponent.cxx +++ /dev/null @@ -1,382 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/accessiblemenucomponent.hxx> - -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <com/sun/star/accessibility/AccessibleStateType.hpp> -#include <com/sun/star/awt/XDevice.hpp> -#include <com/sun/star/awt/XVclWindowPeer.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <comphelper/accessiblecontexthelper.hxx> -#include <unotools/accessiblerelationsethelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/window.hxx> -#include <vcl/menu.hxx> -#include <vcl/settings.hxx> -#include <vcl/unohelp.hxx> -#include <i18nlangtag/languagetag.hxx> - -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star; -using namespace ::comphelper; - - - - -bool OAccessibleMenuComponent::IsEnabled() -{ - return true; -} - - -bool OAccessibleMenuComponent::IsVisible() -{ - bool bVisible = false; - - if ( m_pMenu ) - bVisible = m_pMenu->IsMenuVisible(); - - return bVisible; -} - - -void OAccessibleMenuComponent::FillAccessibleStateSet( sal_Int64& rStateSet ) -{ - if ( IsEnabled() ) - { - rStateSet |= AccessibleStateType::ENABLED; - rStateSet |= AccessibleStateType::SENSITIVE; - } - - rStateSet |= AccessibleStateType::FOCUSABLE; - - if ( IsFocused() ) - rStateSet |= AccessibleStateType::FOCUSED; - - if ( IsVisible() ) - { - rStateSet |= AccessibleStateType::VISIBLE; - rStateSet |= AccessibleStateType::SHOWING; - } - - rStateSet |= AccessibleStateType::OPAQUE; -} - - -// OCommonAccessibleComponent - - -awt::Rectangle OAccessibleMenuComponent::implGetBounds() -{ - awt::Rectangle aBounds( 0, 0, 0, 0 ); - - if ( m_pMenu ) - { - vcl::Window* pWindow = m_pMenu->GetWindow(); - if ( pWindow ) - { - // get bounding rectangle of the window in screen coordinates - AbsoluteScreenPixelRectangle aRect = pWindow->GetWindowExtentsAbsolute(); - aBounds = vcl::unohelper::ConvertToAWTRect(aRect); - - // get position of the accessible parent in screen coordinates - Reference< XAccessible > xParent = getAccessibleParent(); - if ( xParent.is() ) - { - Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), UNO_QUERY ); - if ( xParentComponent.is() ) - { - awt::Point aParentScreenLoc = xParentComponent->getLocationOnScreen(); - - // calculate position of the window relative to the accessible parent - aBounds.X -= aParentScreenLoc.X; - aBounds.Y -= aParentScreenLoc.Y; - } - } - } - } - - return aBounds; -} - - -// XAccessibleContext - - -sal_Int64 OAccessibleMenuComponent::getAccessibleChildCount() -{ - OExternalLockGuard aGuard( this ); - - return GetChildCount(); -} - - -Reference< XAccessible > OAccessibleMenuComponent::getAccessibleChild( sal_Int64 i ) -{ - OExternalLockGuard aGuard( this ); - - if ( i < 0 || i >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - return GetChild( i ); -} - - -Reference< XAccessible > OAccessibleMenuComponent::getAccessibleParent( ) -{ - OExternalLockGuard aGuard( this ); - - Reference< XAccessible > xParent; - - if ( m_pMenu ) - { - vcl::Window* pWindow = m_pMenu->GetWindow(); - if ( pWindow ) - { - vcl::Window* pParent = pWindow->GetAccessibleParentWindow(); - if ( pParent ) - xParent = pParent->GetAccessible(); - } - } - - return xParent; -} - - -sal_Int16 OAccessibleMenuComponent::getAccessibleRole( ) -{ - OExternalLockGuard aGuard( this ); - - return AccessibleRole::UNKNOWN; -} - - -OUString OAccessibleMenuComponent::getAccessibleDescription( ) -{ - OExternalLockGuard aGuard( this ); - - OUString sDescription; - if ( m_pMenu ) - { - vcl::Window* pWindow = m_pMenu->GetWindow(); - if ( pWindow ) - sDescription = pWindow->GetAccessibleDescription(); - } - - return sDescription; -} - - -OUString OAccessibleMenuComponent::getAccessibleName( ) -{ - OExternalLockGuard aGuard( this ); - - return OUString(); -} - - -Reference< XAccessibleRelationSet > OAccessibleMenuComponent::getAccessibleRelationSet( ) -{ - OExternalLockGuard aGuard( this ); - - return new utl::AccessibleRelationSetHelper; -} - - -Locale OAccessibleMenuComponent::getLocale( ) -{ - OExternalLockGuard aGuard( this ); - - return Application::GetSettings().GetLanguageTag().getLocale(); -} - - -// XAccessibleComponent - - -Reference< XAccessible > OAccessibleMenuComponent::getAccessibleAtPoint( const awt::Point& rPoint ) -{ - OExternalLockGuard aGuard( this ); - - return GetChildAt( rPoint ); -} - - -awt::Point OAccessibleMenuComponent::getLocationOnScreen( ) -{ - OExternalLockGuard aGuard( this ); - - awt::Point aPos; - - if ( m_pMenu ) - { - vcl::Window* pWindow = m_pMenu->GetWindow(); - if ( pWindow ) - { - AbsoluteScreenPixelRectangle aRect = pWindow->GetWindowExtentsAbsolute(); - aPos = vcl::unohelper::ConvertToAWTPoint(aRect.TopLeft()); - } - } - - return aPos; -} - - -void OAccessibleMenuComponent::grabFocus( ) -{ - OExternalLockGuard aGuard( this ); - - if ( m_pMenu ) - { - vcl::Window* pWindow = m_pMenu->GetWindow(); - if ( pWindow ) - pWindow->GrabFocus(); - } -} - - -sal_Int32 OAccessibleMenuComponent::getForeground( ) -{ - OExternalLockGuard aGuard( this ); - - const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); - Color nColor = rStyleSettings.GetMenuTextColor(); - - return sal_Int32(nColor); -} - - -sal_Int32 OAccessibleMenuComponent::getBackground( ) -{ - OExternalLockGuard aGuard( this ); - - return 0; -} - - -// XAccessibleExtendedComponent - -OUString OAccessibleMenuComponent::getTitledBorderText( ) -{ - OExternalLockGuard aGuard( this ); - - return OUString(); -} - - -OUString OAccessibleMenuComponent::getToolTipText( ) -{ - OExternalLockGuard aGuard( this ); - - return OUString(); -} - - -// XAccessibleSelection - - -void OAccessibleMenuComponent::selectAccessibleChild( sal_Int64 nChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nChildIndex < 0 || nChildIndex >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - SelectChild( nChildIndex ); -} - - -sal_Bool OAccessibleMenuComponent::isAccessibleChildSelected( sal_Int64 nChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nChildIndex < 0 || nChildIndex >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - return IsChildSelected( nChildIndex ); -} - - -void OAccessibleMenuComponent::clearAccessibleSelection( ) -{ - OExternalLockGuard aGuard( this ); - - DeSelectAll(); -} - - -void OAccessibleMenuComponent::selectAllAccessibleChildren( ) -{ - // This method makes no sense in a menu, and so does nothing. -} - - -sal_Int64 OAccessibleMenuComponent::getSelectedAccessibleChildCount( ) -{ - OExternalLockGuard aGuard( this ); - - sal_Int64 nRet = 0; - - for ( sal_Int64 i = 0, nCount = GetChildCount(); i < nCount; i++ ) - { - if ( IsChildSelected( i ) ) - ++nRet; - } - - return nRet; -} - - -Reference< XAccessible > OAccessibleMenuComponent::getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nSelectedChildIndex < 0 || nSelectedChildIndex >= getSelectedAccessibleChildCount() ) - throw IndexOutOfBoundsException(); - - Reference< XAccessible > xChild; - - for ( sal_Int64 i = 0, j = 0, nCount = GetChildCount(); i < nCount; i++ ) - { - if ( IsChildSelected( i ) && ( j++ == nSelectedChildIndex ) ) - { - xChild = GetChild( i ); - break; - } - } - - return xChild; -} - - -void OAccessibleMenuComponent::deselectAccessibleChild( sal_Int64 nChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nChildIndex < 0 || nChildIndex >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - DeSelectAll(); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/accessiblemenuitemcomponent.cxx b/accessibility/source/standard/accessiblemenuitemcomponent.cxx deleted file mode 100644 index 0d171e64ccaa..000000000000 --- a/accessibility/source/standard/accessiblemenuitemcomponent.cxx +++ /dev/null @@ -1,452 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/accessiblemenuitemcomponent.hxx> - -#include <com/sun/star/accessibility/AccessibleEventId.hpp> -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <com/sun/star/accessibility/AccessibleStateType.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <unotools/accessiblerelationsethelper.hxx> -#include <comphelper/accessiblecontexthelper.hxx> -#include <comphelper/accessibletexthelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/unohelp.hxx> -#include <vcl/window.hxx> -#include <vcl/menu.hxx> -#include <vcl/mnemonic.hxx> -#include <vcl/settings.hxx> -#include <i18nlangtag/languagetag.hxx> - -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star; -using namespace ::comphelper; - - - - -OAccessibleMenuItemComponent::OAccessibleMenuItemComponent( Menu* pParent, sal_uInt16 nItemPos, Menu* pMenu ) - :OAccessibleMenuBaseComponent( pMenu ) - ,m_pParent( pParent ) - ,m_nItemPos( nItemPos ) -{ - m_sAccessibleName = GetAccessibleName(); - m_sItemText = GetItemText(); -} - -OAccessibleMenuItemComponent::~OAccessibleMenuItemComponent() -{ -} - -bool OAccessibleMenuItemComponent::IsEnabled() -{ - OExternalLockGuard aGuard( this ); - - bool bEnabled = false; - if ( m_pParent ) - bEnabled = m_pParent->IsItemEnabled( m_pParent->GetItemId( m_nItemPos ) ); - - return bEnabled; -} - - -bool OAccessibleMenuItemComponent::IsVisible() -{ - bool bVisible = false; - - if ( m_pParent ) - bVisible = m_pParent->IsItemPosVisible( m_nItemPos ); - - return bVisible; -} - - -void OAccessibleMenuItemComponent::Select() -{ - // open the parent menu - Reference< XAccessible > xParent( getAccessibleParent() ); - if ( xParent.is() ) - { - OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xParent.get() ); - if ( pComp && pComp->getAccessibleRole() == AccessibleRole::MENU && !pComp->IsPopupMenuOpen() ) - pComp->Click(); - } - - // highlight the menu item - if ( m_pParent ) - m_pParent->HighlightItem( m_nItemPos ); -} - - -void OAccessibleMenuItemComponent::DeSelect() -{ - if ( m_pParent && IsSelected() ) - m_pParent->DeHighlight(); -} - - -void OAccessibleMenuItemComponent::Click() -{ - // open the parent menu - Reference< XAccessible > xParent( getAccessibleParent() ); - if ( xParent.is() ) - { - OAccessibleMenuBaseComponent* pComp = static_cast< OAccessibleMenuBaseComponent* >( xParent.get() ); - if ( pComp && pComp->getAccessibleRole() == AccessibleRole::MENU && !pComp->IsPopupMenuOpen() ) - pComp->Click(); - } - - // click the menu item - if ( !m_pParent ) - return; - - vcl::Window* pWindow = m_pParent->GetWindow(); - if ( !pWindow ) - return; - - // #102438# Menu items are not selectable - // Popup menus are executed asynchronously, triggered by a timer. - // As Menu::SelectItem only works, if the corresponding menu window is - // already created, we have to set the menu delay to 0, so - // that the popup menus are executed synchronously. - AllSettings aSettings = pWindow->GetSettings(); - MouseSettings aMouseSettings = aSettings.GetMouseSettings(); - sal_Int32 nDelay = aMouseSettings.GetMenuDelay(); - aMouseSettings.SetMenuDelay( 0 ); - aSettings.SetMouseSettings( aMouseSettings ); - pWindow->SetSettings( aSettings ); - - m_pParent->SelectItem( m_pParent->GetItemId( m_nItemPos ) ); - - // meanwhile the window pointer may be invalid - pWindow = m_pParent->GetWindow(); - if ( pWindow ) - { - // set the menu delay back to the old value - aSettings = pWindow->GetSettings(); - aMouseSettings = aSettings.GetMouseSettings(); - aMouseSettings.SetMenuDelay( nDelay ); - aSettings.SetMouseSettings( aMouseSettings ); - pWindow->SetSettings( aSettings ); - } -} - - -void OAccessibleMenuItemComponent::SetItemPos( sal_uInt16 nItemPos ) -{ - m_nItemPos = nItemPos; -} - - -void OAccessibleMenuItemComponent::SetAccessibleName( const OUString& sAccessibleName ) -{ - if ( m_sAccessibleName != sAccessibleName ) - { - Any aOldValue, aNewValue; - aOldValue <<= m_sAccessibleName; - aNewValue <<= sAccessibleName; - m_sAccessibleName = sAccessibleName; - NotifyAccessibleEvent( AccessibleEventId::NAME_CHANGED, aOldValue, aNewValue ); - } -} - - -OUString OAccessibleMenuItemComponent::GetAccessibleName() -{ - OUString sName; - if ( m_pParent ) - { - sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos ); - sName = m_pParent->GetAccessibleName( nItemId ); - if ( sName.isEmpty() ) - sName = m_pParent->GetItemText( nItemId ); - sName = removeMnemonicFromString( sName ); -#if defined(_WIN32) - if ( m_pParent->GetAccelKey( nItemId ).GetName().getLength() ) - sName += "\t" + m_pParent->GetAccelKey(nItemId).GetName(); -#endif - } - - return sName; -} - - -void OAccessibleMenuItemComponent::SetItemText( const OUString& sItemText ) -{ - Any aOldValue, aNewValue; - if ( OCommonAccessibleText::implInitTextChangedEvent( m_sItemText, sItemText, aOldValue, aNewValue ) ) - { - m_sItemText = sItemText; - NotifyAccessibleEvent( AccessibleEventId::TEXT_CHANGED, aOldValue, aNewValue ); - } -} - - -OUString OAccessibleMenuItemComponent::GetItemText() -{ - OUString sText; - if ( m_pParent ) - sText = removeMnemonicFromString( m_pParent->GetItemText( m_pParent->GetItemId( m_nItemPos ) ) ); - - return sText; -} - - -void OAccessibleMenuItemComponent::FillAccessibleStateSet( sal_Int64& rStateSet ) -{ - bool bEnabled = IsEnabled(); - if ( bEnabled ) - { - rStateSet |= AccessibleStateType::ENABLED; - rStateSet |= AccessibleStateType::SENSITIVE; - } - - if ( IsVisible() ) - { - rStateSet |= AccessibleStateType::SHOWING; - if( !IsMenuHideDisabledEntries() || bEnabled ) - rStateSet |= AccessibleStateType::VISIBLE; - } - rStateSet |= AccessibleStateType::OPAQUE; -} - - -// OCommonAccessibleComponent - - -awt::Rectangle OAccessibleMenuItemComponent::implGetBounds() -{ - awt::Rectangle aBounds( 0, 0, 0, 0 ); - - if ( m_pParent ) - { - // get bounding rectangle of the item relative to the containing window - aBounds = vcl::unohelper::ConvertToAWTRect(m_pParent->GetBoundingRectangle(m_nItemPos)); - - // get position of containing window in screen coordinates - vcl::Window* pWindow = m_pParent->GetWindow(); - if ( pWindow ) - { - AbsoluteScreenPixelRectangle aRect = pWindow->GetWindowExtentsAbsolute(); - awt::Point aWindowScreenLoc = vcl::unohelper::ConvertToAWTPoint(aRect.TopLeft()); - - // get position of accessible parent in screen coordinates - Reference< XAccessible > xParent = getAccessibleParent(); - if ( xParent.is() ) - { - Reference< XAccessibleComponent > xParentComponent( xParent->getAccessibleContext(), UNO_QUERY ); - if ( xParentComponent.is() ) - { - awt::Point aParentScreenLoc = xParentComponent->getLocationOnScreen(); - - // calculate bounding rectangle of the item relative to the accessible parent - aBounds.X += aWindowScreenLoc.X - aParentScreenLoc.X; - aBounds.Y += aWindowScreenLoc.Y - aParentScreenLoc.Y; - } - } - } - } - - return aBounds; -} - - -// XComponent - - -void SAL_CALL OAccessibleMenuItemComponent::disposing() -{ - OAccessibleMenuBaseComponent::disposing(); - - m_pParent = nullptr; - m_sAccessibleName.clear(); - m_sItemText.clear(); -} - - -// XAccessibleContext - - -sal_Int64 OAccessibleMenuItemComponent::getAccessibleChildCount() -{ - OExternalLockGuard aGuard( this ); - - return 0; -} - - -Reference< XAccessible > OAccessibleMenuItemComponent::getAccessibleChild( sal_Int64 i ) -{ - OExternalLockGuard aGuard( this ); - - if ( i < 0 || i >= getAccessibleChildCount() ) - throw IndexOutOfBoundsException(); - - return Reference< XAccessible >(); -} - - -Reference< XAccessible > OAccessibleMenuItemComponent::getAccessibleParent( ) -{ - OExternalLockGuard aGuard( this ); - - return m_pParent->GetAccessible(); -} - - -sal_Int64 OAccessibleMenuItemComponent::getAccessibleIndexInParent( ) -{ - OExternalLockGuard aGuard( this ); - - return m_nItemPos; -} - - -sal_Int16 OAccessibleMenuItemComponent::getAccessibleRole( ) -{ - OExternalLockGuard aGuard( this ); - - return AccessibleRole::UNKNOWN; -} - - -OUString OAccessibleMenuItemComponent::getAccessibleDescription( ) -{ - OExternalLockGuard aGuard( this ); - - OUString sDescription; - if ( m_pParent ) - sDescription = m_pParent->GetAccessibleDescription( m_pParent->GetItemId( m_nItemPos ) ); - - return sDescription; -} - - -OUString OAccessibleMenuItemComponent::getAccessibleName( ) -{ - OExternalLockGuard aGuard( this ); - - return m_sAccessibleName; -} - - -Reference< XAccessibleRelationSet > OAccessibleMenuItemComponent::getAccessibleRelationSet( ) -{ - OExternalLockGuard aGuard( this ); - - return new utl::AccessibleRelationSetHelper; -} - - -Locale OAccessibleMenuItemComponent::getLocale( ) -{ - OExternalLockGuard aGuard( this ); - - return Application::GetSettings().GetLanguageTag().getLocale(); -} - - -// XAccessibleComponent - - -Reference< XAccessible > OAccessibleMenuItemComponent::getAccessibleAtPoint( const awt::Point& ) -{ - OExternalLockGuard aGuard( this ); - - return Reference< XAccessible >(); -} - - -void OAccessibleMenuItemComponent::grabFocus( ) -{ - // no focus for items -} - - -sal_Int32 OAccessibleMenuItemComponent::getForeground( ) -{ - OExternalLockGuard aGuard( this ); - - sal_Int32 nColor = 0; - Reference< XAccessible > xParent = getAccessibleParent(); - if ( xParent.is() ) - { - Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY ); - if ( xParentComp.is() ) - nColor = xParentComp->getForeground(); - } - - return nColor; -} - - -sal_Int32 OAccessibleMenuItemComponent::getBackground( ) -{ - OExternalLockGuard aGuard( this ); - - sal_Int32 nColor = 0; - Reference< XAccessible > xParent = getAccessibleParent(); - if ( xParent.is() ) - { - Reference< XAccessibleComponent > xParentComp( xParent->getAccessibleContext(), UNO_QUERY ); - if ( xParentComp.is() ) - nColor = xParentComp->getBackground(); - } - - return nColor; -} - - -// XAccessibleExtendedComponent - -OUString OAccessibleMenuItemComponent::getTitledBorderText( ) -{ - OExternalLockGuard aGuard( this ); - - return OUString(); -} - - -OUString OAccessibleMenuItemComponent::getToolTipText( ) -{ - OExternalLockGuard aGuard( this ); - - OUString sRet; - if ( m_pParent ) - sRet = m_pParent->GetTipHelpText( m_pParent->GetItemId( m_nItemPos ) ); - - return sRet; -} - - -bool OAccessibleMenuItemComponent::IsMenuHideDisabledEntries() -{ - if (m_pParent ) - { - if( m_pParent->GetMenuFlags() & MenuFlags::HideDisabledEntries) - { - return true; - } - } - return false; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/vclxaccessiblemenu.cxx b/accessibility/source/standard/vclxaccessiblemenu.cxx deleted file mode 100644 index 5ba208d2f368..000000000000 --- a/accessibility/source/standard/vclxaccessiblemenu.cxx +++ /dev/null @@ -1,222 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/vclxaccessiblemenu.hxx> - -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <comphelper/accessiblecontexthelper.hxx> -#include <vcl/menu.hxx> - - -using namespace ::com::sun::star; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::accessibility; -using namespace ::comphelper; - - -// VCLXAccessibleMenu - - -bool VCLXAccessibleMenu::IsFocused() -{ - bool bFocused = false; - - if ( IsHighlighted() && !IsChildHighlighted() ) - bFocused = true; - - return bFocused; -} - - -bool VCLXAccessibleMenu::IsPopupMenuOpen() -{ - bool bPopupMenuOpen = false; - - if ( m_pParent ) - { - PopupMenu* pPopupMenu = m_pParent->GetPopupMenu( m_pParent->GetItemId( m_nItemPos ) ); - if ( pPopupMenu && pPopupMenu->IsMenuVisible() ) - bPopupMenuOpen = true; - } - - return bPopupMenuOpen; -} - - -// XServiceInfo - - -OUString VCLXAccessibleMenu::getImplementationName() -{ - return u"com.sun.star.comp.toolkit.AccessibleMenu"_ustr; -} - - -Sequence< OUString > VCLXAccessibleMenu::getSupportedServiceNames() -{ - return { u"com.sun.star.awt.AccessibleMenu"_ustr }; -} - - -// XAccessibleContext - - -sal_Int64 VCLXAccessibleMenu::getAccessibleChildCount( ) -{ - OExternalLockGuard aGuard( this ); - - return GetChildCount(); -} - - -Reference< XAccessible > VCLXAccessibleMenu::getAccessibleChild( sal_Int64 i ) -{ - OExternalLockGuard aGuard( this ); - - if ( i < 0 || i >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - return GetChild( i ); -} - - -sal_Int16 VCLXAccessibleMenu::getAccessibleRole( ) -{ - OExternalLockGuard aGuard( this ); - - return AccessibleRole::MENU; -} - - -// XAccessibleComponent - - -Reference< XAccessible > VCLXAccessibleMenu::getAccessibleAtPoint( const awt::Point& rPoint ) -{ - OExternalLockGuard aGuard( this ); - - return GetChildAt( rPoint ); -} - - -// XAccessibleSelection - - -void VCLXAccessibleMenu::selectAccessibleChild( sal_Int64 nChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nChildIndex < 0 || nChildIndex >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - SelectChild( nChildIndex ); -} - - -sal_Bool VCLXAccessibleMenu::isAccessibleChildSelected( sal_Int64 nChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nChildIndex < 0 || nChildIndex >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - return IsChildSelected( nChildIndex ); -} - - -void VCLXAccessibleMenu::clearAccessibleSelection( ) -{ - OExternalLockGuard aGuard( this ); - - DeSelectAll(); -} - - -void VCLXAccessibleMenu::selectAllAccessibleChildren( ) -{ - // This method makes no sense in a menu, and so does nothing. -} - - -sal_Int64 VCLXAccessibleMenu::getSelectedAccessibleChildCount( ) -{ - OExternalLockGuard aGuard( this ); - - return implGetSelectedAccessibleChildCount(); -} - -sal_Int64 VCLXAccessibleMenu::implGetSelectedAccessibleChildCount( ) -{ - sal_Int64 nRet = 0; - - for ( sal_Int64 i = 0, nCount = GetChildCount(); i < nCount; i++ ) - { - if ( IsChildSelected( i ) ) - ++nRet; - } - - return nRet; -} - -Reference< XAccessible > VCLXAccessibleMenu::getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nSelectedChildIndex < 0 || nSelectedChildIndex >= getSelectedAccessibleChildCount() ) - throw IndexOutOfBoundsException(); - - Reference< XAccessible > xChild; - - for ( sal_Int64 i = 0, j = 0, nCount = GetChildCount(); i < nCount; i++ ) - { - if ( IsChildSelected( i ) && ( j++ == nSelectedChildIndex ) ) - { - xChild = GetChild( i ); - break; - } - } - - return xChild; -} - - -void VCLXAccessibleMenu::deselectAccessibleChild( sal_Int64 nChildIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nChildIndex < 0 || nChildIndex >= GetChildCount() ) - throw IndexOutOfBoundsException(); - - DeSelectAll(); -} - - -OUString VCLXAccessibleMenu::getAccessibleActionDescription ( sal_Int32 nIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nIndex < 0 || nIndex >= getAccessibleActionCount() ) - throw IndexOutOfBoundsException(); - - return OUString( ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/vclxaccessiblemenubar.cxx b/accessibility/source/standard/vclxaccessiblemenubar.cxx deleted file mode 100644 index 9664254fa543..000000000000 --- a/accessibility/source/standard/vclxaccessiblemenubar.cxx +++ /dev/null @@ -1,188 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/vclxaccessiblemenubar.hxx> - -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <comphelper/accessiblecontexthelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/window.hxx> -#include <vcl/menu.hxx> -#include <vcl/settings.hxx> - -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star; -using namespace ::comphelper; - - - - -VCLXAccessibleMenuBar::VCLXAccessibleMenuBar( Menu* pMenu ) - :OAccessibleMenuComponent( pMenu ) -{ - if ( pMenu ) - { - m_pWindow = pMenu->GetWindow(); - - if ( m_pWindow ) - m_pWindow->AddEventListener( LINK( this, VCLXAccessibleMenuBar, WindowEventListener ) ); - } -} - - -VCLXAccessibleMenuBar::~VCLXAccessibleMenuBar() -{ - if ( m_pWindow ) - m_pWindow->RemoveEventListener( LINK( this, VCLXAccessibleMenuBar, WindowEventListener ) ); -} - - -bool VCLXAccessibleMenuBar::IsFocused() -{ - bool bFocused = false; - - if ( m_pWindow && m_pWindow->HasFocus() && !IsChildHighlighted() ) - bFocused = true; - - return bFocused; -} - - -IMPL_LINK( VCLXAccessibleMenuBar, WindowEventListener, VclWindowEvent&, rEvent, void ) -{ - assert( rEvent.GetWindow() ); - if ( !rEvent.GetWindow()->IsAccessibilityEventsSuppressed() || ( rEvent.GetId() == VclEventId::ObjectDying ) ) - { - ProcessWindowEvent( rEvent ); - } -} - - -void VCLXAccessibleMenuBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) -{ - switch ( rVclWindowEvent.GetId() ) - { - case VclEventId::WindowGetFocus: - case VclEventId::WindowLoseFocus: - { - SetFocused( rVclWindowEvent.GetId() == VclEventId::WindowGetFocus ); - } - break; - case VclEventId::ObjectDying: - { - if ( m_pWindow ) - { - m_pWindow->RemoveEventListener( LINK( this, VCLXAccessibleMenuBar, WindowEventListener ) ); - m_pWindow = nullptr; - } - } - break; - default: - { - } - break; - } -} - - -// XComponent - - -void VCLXAccessibleMenuBar::disposing() -{ - OAccessibleMenuComponent::disposing(); - - if ( m_pWindow ) - { - m_pWindow->RemoveEventListener( LINK( this, VCLXAccessibleMenuBar, WindowEventListener ) ); - m_pWindow = nullptr; - } -} - - -// XServiceInfo - - -OUString VCLXAccessibleMenuBar::getImplementationName() -{ - return u"com.sun.star.comp.toolkit.AccessibleMenuBar"_ustr; -} - - -Sequence< OUString > VCLXAccessibleMenuBar::getSupportedServiceNames() -{ - return { u"com.sun.star.awt.AccessibleMenuBar"_ustr }; -} - - -// XAccessibleContext - - -sal_Int64 VCLXAccessibleMenuBar::getAccessibleIndexInParent( ) -{ - OExternalLockGuard aGuard( this ); - - sal_Int64 nIndexInParent = -1; - - if ( m_pMenu ) - { - vcl::Window* pWindow = m_pMenu->GetWindow(); - if ( pWindow ) - { - vcl::Window* pParent = pWindow->GetAccessibleParentWindow(); - if ( pParent ) - { - for ( sal_uInt16 n = pParent->GetAccessibleChildWindowCount(); n; ) - { - vcl::Window* pChild = pParent->GetAccessibleChildWindow( --n ); - if ( pChild == pWindow ) - { - nIndexInParent = n; - break; - } - } - } - } - } - - return nIndexInParent; -} - - -sal_Int16 VCLXAccessibleMenuBar::getAccessibleRole( ) -{ - OExternalLockGuard aGuard( this ); - - return AccessibleRole::MENU_BAR; -} - - -// XAccessibleExtendedComponent - - -sal_Int32 VCLXAccessibleMenuBar::getBackground( ) -{ - OExternalLockGuard aGuard( this ); - - return sal_Int32(Application::GetSettings().GetStyleSettings().GetMenuBarColor()); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/vclxaccessiblemenuitem.cxx b/accessibility/source/standard/vclxaccessiblemenuitem.cxx deleted file mode 100644 index a1491c99bc4c..000000000000 --- a/accessibility/source/standard/vclxaccessiblemenuitem.cxx +++ /dev/null @@ -1,577 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/vclxaccessiblemenuitem.hxx> -#include <comphelper/accessiblecontexthelper.hxx> -#include <comphelper/accessiblekeybindinghelper.hxx> -#include <com/sun/star/awt/KeyModifier.hpp> - -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <com/sun/star/accessibility/AccessibleStateType.hpp> -#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> -#include <com/sun/star/datatransfer/clipboard/XFlushableClipboard.hpp> -#include <com/sun/star/lang/IndexOutOfBoundsException.hpp> -#include <comphelper/sequence.hxx> -#include <i18nlangtag/languagetag.hxx> -#include <vcl/accessibility/characterattributeshelper.hxx> -#include <vcl/accessibility/strings.hxx> -#include <vcl/event.hxx> -#include <vcl/svapp.hxx> -#include <vcl/window.hxx> -#include <vcl/menu.hxx> -#include <vcl/unohelp.hxx> -#include <vcl/unohelp2.hxx> -#include <vcl/settings.hxx> - -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star; -using namespace ::comphelper; - - - - -VCLXAccessibleMenuItem::VCLXAccessibleMenuItem( Menu* pParent, sal_uInt16 nItemPos, Menu* pMenu ) - :ImplInheritanceHelper( pParent, nItemPos, pMenu ) -{ -} - - -bool VCLXAccessibleMenuItem::IsFocused() -{ - return IsHighlighted(); -} - - -bool VCLXAccessibleMenuItem::IsSelected() -{ - return IsHighlighted(); -} - -bool VCLXAccessibleMenuItem::IsCheckable() -{ - if (!m_pParent) - return false; - - const sal_uInt16 nItemId = m_pParent->GetItemId(m_nItemPos); - return m_pParent->IsItemCheckable(nItemId); -} - -bool VCLXAccessibleMenuItem::IsChecked() -{ - bool bChecked = false; - - if ( m_pParent ) - { - sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos ); - if ( m_pParent->IsItemChecked( nItemId ) ) - bChecked = true; - } - - return bChecked; -} - - -bool VCLXAccessibleMenuItem::IsHighlighted() -{ - bool bHighlighted = false; - - if ( m_pParent && m_pParent->IsHighlighted( m_nItemPos ) ) - bHighlighted = true; - - return bHighlighted; -} - - -void VCLXAccessibleMenuItem::FillAccessibleStateSet( sal_Int64& rStateSet ) -{ - OAccessibleMenuItemComponent::FillAccessibleStateSet( rStateSet ); - - rStateSet |= AccessibleStateType::FOCUSABLE; - - if ( IsFocused() ) - rStateSet |= AccessibleStateType::FOCUSED; - - rStateSet |= AccessibleStateType::SELECTABLE; - - if ( IsSelected() ) - rStateSet |= AccessibleStateType::SELECTED; - - if (IsCheckable()) - rStateSet |= AccessibleStateType::CHECKABLE; - if ( IsChecked() ) - rStateSet |= AccessibleStateType::CHECKED; -} - - -// OCommonAccessibleText - - -OUString VCLXAccessibleMenuItem::implGetText() -{ - return m_sItemText; -} - - -Locale VCLXAccessibleMenuItem::implGetLocale() -{ - return Application::GetSettings().GetLanguageTag().getLocale(); -} - - -void VCLXAccessibleMenuItem::implGetSelection( sal_Int32& nStartIndex, sal_Int32& nEndIndex ) -{ - nStartIndex = 0; - nEndIndex = 0; -} - - -// XServiceInfo - - -OUString VCLXAccessibleMenuItem::getImplementationName() -{ - return u"com.sun.star.comp.toolkit.AccessibleMenuItem"_ustr; -} - - -Sequence< OUString > VCLXAccessibleMenuItem::getSupportedServiceNames() -{ - return { u"com.sun.star.awt.AccessibleMenuItem"_ustr }; -} - - -// XAccessibleContext - - -sal_Int16 VCLXAccessibleMenuItem::getAccessibleRole( ) -{ - OExternalLockGuard aGuard( this ); - // IA2 CWS. MT: We had the additional roles in UAA for ever, but never used them anywhere. - // Looks reasonable, but need to verify in Orca and VoiceOver. - sal_Int16 nRole = AccessibleRole::MENU_ITEM; - if ( m_pParent ) - { - sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos ); - MenuItemBits nItemBits = m_pParent->GetItemBits(nItemId); - if( nItemBits & MenuItemBits::RADIOCHECK) - nRole = AccessibleRole::RADIO_MENU_ITEM; - else if( nItemBits & MenuItemBits::CHECKABLE) - nRole = AccessibleRole::CHECK_MENU_ITEM; - } - return nRole; -} - - -// XAccessibleText - - -sal_Int32 VCLXAccessibleMenuItem::getCaretPosition() -{ - return -1; -} - - -sal_Bool VCLXAccessibleMenuItem::setCaretPosition( sal_Int32 nIndex ) -{ - - OExternalLockGuard aGuard( this ); - - if ( !implIsValidRange( nIndex, nIndex, m_sItemText.getLength() ) ) - throw IndexOutOfBoundsException(); - - return false; -} - - -sal_Unicode VCLXAccessibleMenuItem::getCharacter( sal_Int32 nIndex ) -{ - OExternalLockGuard aGuard( this ); - - return OCommonAccessibleText::implGetCharacter( implGetText(), nIndex ); -} - - -Sequence< PropertyValue > VCLXAccessibleMenuItem::getCharacterAttributes( sal_Int32 nIndex, const Sequence< OUString >& aRequestedAttributes ) -{ - OExternalLockGuard aGuard( this ); - - if ( !implIsValidIndex( nIndex, m_sItemText.getLength() ) ) - throw IndexOutOfBoundsException(); - - vcl::Font aFont = Application::GetSettings().GetStyleSettings().GetMenuFont(); - sal_Int32 nBackColor = getBackground(); - sal_Int32 nColor = getForeground(); - return CharacterAttributesHelper( aFont, nBackColor, nColor ) - .GetCharacterAttributes( aRequestedAttributes ); -} - - -awt::Rectangle VCLXAccessibleMenuItem::getCharacterBounds( sal_Int32 nIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( !implIsValidIndex( nIndex, m_sItemText.getLength() ) ) - throw IndexOutOfBoundsException(); - - awt::Rectangle aBounds( 0, 0, 0, 0 ); - if ( m_pParent ) - { - sal_uInt16 nItemId = m_pParent->GetItemId( m_nItemPos ); - tools::Rectangle aItemRect = m_pParent->GetBoundingRectangle( m_nItemPos ); - tools::Rectangle aCharRect = m_pParent->GetCharacterBounds( nItemId, nIndex ); - aCharRect.Move( -aItemRect.Left(), -aItemRect.Top() ); - aBounds = vcl::unohelper::ConvertToAWTRect(aCharRect); - } - - return aBounds; -} - - -sal_Int32 VCLXAccessibleMenuItem::getCharacterCount() -{ - OExternalLockGuard aGuard( this ); - - return m_sItemText.getLength(); -} - - -sal_Int32 VCLXAccessibleMenuItem::getIndexAtPoint( const awt::Point& aPoint ) -{ - OExternalLockGuard aGuard( this ); - - sal_Int32 nIndex = -1; - if ( m_pParent ) - { - sal_uInt16 nItemId = 0; - tools::Rectangle aItemRect = m_pParent->GetBoundingRectangle( m_nItemPos ); - Point aPnt(vcl::unohelper::ConvertToVCLPoint(aPoint)); - aPnt += aItemRect.TopLeft(); - sal_Int32 nI = m_pParent->GetIndexForPoint( aPnt, nItemId ); - if ( nI != -1 && m_pParent->GetItemId( m_nItemPos ) == nItemId ) - nIndex = nI; - } - - return nIndex; -} - - -OUString VCLXAccessibleMenuItem::getSelectedText() -{ - OExternalLockGuard aGuard( this ); - - return OUString(); -} - - -sal_Int32 VCLXAccessibleMenuItem::getSelectionStart() -{ - OExternalLockGuard aGuard( this ); - - return 0; -} - - -sal_Int32 VCLXAccessibleMenuItem::getSelectionEnd() -{ - OExternalLockGuard aGuard( this ); - - return 0; -} - - -sal_Bool VCLXAccessibleMenuItem::setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( !implIsValidRange( nStartIndex, nEndIndex, m_sItemText.getLength() ) ) - throw IndexOutOfBoundsException(); - - return false; -} - - -OUString VCLXAccessibleMenuItem::getText() -{ - OExternalLockGuard aGuard( this ); - - return m_sItemText; -} - - -OUString VCLXAccessibleMenuItem::getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) -{ - OExternalLockGuard aGuard( this ); - - return OCommonAccessibleText::implGetTextRange( implGetText(), nStartIndex, nEndIndex ); -} - - -css::accessibility::TextSegment VCLXAccessibleMenuItem::getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) -{ - OExternalLockGuard aGuard( this ); - - return OCommonAccessibleText::getTextAtIndex( nIndex, aTextType ); -} - - -css::accessibility::TextSegment VCLXAccessibleMenuItem::getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) -{ - OExternalLockGuard aGuard( this ); - - return OCommonAccessibleText::getTextBeforeIndex( nIndex, aTextType ); -} - - -css::accessibility::TextSegment VCLXAccessibleMenuItem::getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) -{ - OExternalLockGuard aGuard( this ); - - return OCommonAccessibleText::getTextBehindIndex( nIndex, aTextType ); -} - - -sal_Bool VCLXAccessibleMenuItem::copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) -{ - OExternalLockGuard aGuard( this ); - - bool bReturn = false; - - if ( m_pParent ) - { - vcl::Window* pWindow = m_pParent->GetWindow(); - if ( pWindow ) - { - Reference< datatransfer::clipboard::XClipboard > xClipboard = pWindow->GetClipboard(); - if ( xClipboard.is() ) - { - OUString sText( getTextRange( nStartIndex, nEndIndex ) ); - - rtl::Reference<vcl::unohelper::TextDataObject> pDataObj = new vcl::unohelper::TextDataObject( sText ); - - SolarMutexReleaser aReleaser; - xClipboard->setContents( pDataObj, nullptr ); - Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); - if( xFlushableClipboard.is() ) - xFlushableClipboard->flushClipboard(); - - bReturn = true; - } - } - } - - return bReturn; -} - -sal_Bool VCLXAccessibleMenuItem::scrollSubstringTo( sal_Int32, sal_Int32, AccessibleScrollType ) -{ - return false; -} - - -// XAccessibleAction - - -sal_Int32 VCLXAccessibleMenuItem::getAccessibleActionCount( ) -{ - return 1; -} - - -sal_Bool VCLXAccessibleMenuItem::doAccessibleAction ( sal_Int32 nIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nIndex != 0 ) - throw IndexOutOfBoundsException(); - - Click(); - - return true; -} - - -OUString VCLXAccessibleMenuItem::getAccessibleActionDescription ( sal_Int32 nIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nIndex != 0 ) - throw IndexOutOfBoundsException(); - - return RID_STR_ACC_ACTION_SELECT; -} - - -Reference< XAccessibleKeyBinding > VCLXAccessibleMenuItem::getAccessibleActionKeyBinding( sal_Int32 nIndex ) -{ - OExternalLockGuard aGuard( this ); - - if ( nIndex != 0 ) - throw IndexOutOfBoundsException(); - - rtl::Reference<OAccessibleKeyBindingHelper> pKeyBindingHelper = new OAccessibleKeyBindingHelper(); - - if ( m_pParent ) - { - // create auto mnemonics - if (!(m_pParent->GetMenuFlags() & MenuFlags::NoAutoMnemonics)) - m_pParent->CreateAutoMnemonics(); - - // activation key - KeyEvent aKeyEvent = m_pParent->GetActivationKey( m_pParent->GetItemId( m_nItemPos ) ); - vcl::KeyCode aKeyCode = aKeyEvent.GetKeyCode(); - Sequence< awt::KeyStroke > aSeq1 - { - { - 0, // Modifiers - static_cast< sal_Int16 >(aKeyCode.GetCode()), - aKeyEvent.GetCharCode(), - static_cast< sal_Int16 >( aKeyCode.GetFunction()) - } - }; - Reference< XAccessible > xParent( getAccessibleParent() ); - if ( xParent.is() ) - { - Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() ); - if ( xParentContext.is() && xParentContext->getAccessibleRole() == AccessibleRole::MENU_BAR ) - aSeq1.getArray()[0].Modifiers |= awt::KeyModifier::MOD2; - } - pKeyBindingHelper->AddKeyBinding( aSeq1 ); - - // complete menu activation key sequence - Sequence< awt::KeyStroke > aSeq; - if ( xParent.is() ) - { - Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() ); - if ( xParentContext.is() && xParentContext->getAccessibleRole() == AccessibleRole::MENU ) - { - Reference< XAccessibleAction > xAction( xParentContext, UNO_QUERY ); - if ( xAction.is() && xAction->getAccessibleActionCount() > 0 ) - { - Reference< XAccessibleKeyBinding > xKeyB( xAction->getAccessibleActionKeyBinding( 0 ) ); - if ( xKeyB.is() && xKeyB->getAccessibleKeyBindingCount() > 1 ) - aSeq = xKeyB->getAccessibleKeyBinding( 1 ); - } - } - } - Sequence< awt::KeyStroke > aSeq2 = ::comphelper::concatSequences( aSeq, aSeq1 ); - pKeyBindingHelper->AddKeyBinding( aSeq2 ); - - // accelerator key - vcl::KeyCode aAccelKeyCode = m_pParent->GetAccelKey( m_pParent->GetItemId( m_nItemPos ) ); - if ( aAccelKeyCode.GetCode() != 0 ) - { - Sequence< awt::KeyStroke > aSeq3 - { - { - 0, // Modifiers - static_cast< sal_Int16 >(aAccelKeyCode.GetCode()), - aKeyEvent.GetCharCode(), - static_cast< sal_Int16 >(aAccelKeyCode.GetFunction()) - } - }; - if (aAccelKeyCode.GetModifier() != 0) - { - auto pSeq3 = aSeq3.getArray(); - if ( aAccelKeyCode.IsShift() ) - pSeq3[0].Modifiers |= awt::KeyModifier::SHIFT; - if ( aAccelKeyCode.IsMod1() ) - pSeq3[0].Modifiers |= awt::KeyModifier::MOD1; - if ( aAccelKeyCode.IsMod2() ) - pSeq3[0].Modifiers |= awt::KeyModifier::MOD2; - if ( aAccelKeyCode.IsMod3() ) - pSeq3[0].Modifiers |= awt::KeyModifier::MOD3; - } - pKeyBindingHelper->AddKeyBinding( aSeq3 ); - } - } - - return pKeyBindingHelper; -} - - -// XAccessibleValue - - -Any VCLXAccessibleMenuItem::getCurrentValue( ) -{ - OExternalLockGuard aGuard( this ); - - Any aValue; - if ( IsSelected() ) - aValue <<= sal_Int32(1); - else - aValue <<= sal_Int32(0); - - return aValue; -} - - -sal_Bool VCLXAccessibleMenuItem::setCurrentValue( const Any& aNumber ) -{ - OExternalLockGuard aGuard( this ); - - bool bReturn = false; - sal_Int32 nValue = 0; - OSL_VERIFY( aNumber >>= nValue ); - - if ( nValue <= 0 ) - { - DeSelect(); - bReturn = true; - } - else if ( nValue >= 1 ) - { - Select(); - bReturn = true; - } - - return bReturn; -} - - -Any VCLXAccessibleMenuItem::getMaximumValue( ) -{ - Any aValue; - aValue <<= sal_Int32(1); - - return aValue; -} - - -Any VCLXAccessibleMenuItem::getMinimumValue( ) -{ - Any aValue; - aValue <<= sal_Int32(0); - - return aValue; -} - -Any VCLXAccessibleMenuItem::getMinimumIncrement( ) -{ - Any aValue; - aValue <<= sal_Int32(1); - - return aValue; -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/vclxaccessiblemenuseparator.cxx b/accessibility/source/standard/vclxaccessiblemenuseparator.cxx deleted file mode 100644 index d64ccb0baa25..000000000000 --- a/accessibility/source/standard/vclxaccessiblemenuseparator.cxx +++ /dev/null @@ -1,49 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/vclxaccessiblemenuseparator.hxx> - -#include <com/sun/star/accessibility/AccessibleRole.hpp> - -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star; - -VCLXAccessibleMenuSeparator::VCLXAccessibleMenuSeparator(Menu* pParent, sal_uInt16 nItemPos) - : OAccessibleMenuItemComponent(pParent, nItemPos, nullptr) -{ -} - -// XServiceInfo - -OUString VCLXAccessibleMenuSeparator::getImplementationName() -{ - return u"com.sun.star.comp.toolkit.AccessibleMenuSeparator"_ustr; -} - -Sequence<OUString> VCLXAccessibleMenuSeparator::getSupportedServiceNames() -{ - return { u"com.sun.star.awt.AccessibleMenuSeparator"_ustr }; -} - -// XAccessibleContext - -sal_Int16 VCLXAccessibleMenuSeparator::getAccessibleRole() { return AccessibleRole::SEPARATOR; } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/accessibility/source/standard/vclxaccessiblepopupmenu.cxx b/accessibility/source/standard/vclxaccessiblepopupmenu.cxx deleted file mode 100644 index d8b840eee784..000000000000 --- a/accessibility/source/standard/vclxaccessiblepopupmenu.cxx +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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 . - */ - -#include <standard/vclxaccessiblepopupmenu.hxx> - -#include <com/sun/star/accessibility/AccessibleRole.hpp> -#include <comphelper/accessiblecontexthelper.hxx> -#include <vcl/svapp.hxx> -#include <vcl/settings.hxx> - -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; -using namespace ::comphelper; - - - - -bool VCLXAccessiblePopupMenu::IsFocused() -{ - return !IsChildHighlighted(); -} - - -// XServiceInfo - - -OUString VCLXAccessiblePopupMenu::getImplementationName() -{ - return u"com.sun.star.comp.toolkit.AccessiblePopupMenu"_ustr; -} - - -Sequence< OUString > VCLXAccessiblePopupMenu::getSupportedServiceNames() -{ - return { u"com.sun.star.awt.AccessiblePopupMenu"_ustr }; -} - - -// XAccessibleContext - - -sal_Int64 VCLXAccessiblePopupMenu::getAccessibleIndexInParent( ) -{ - OExternalLockGuard aGuard( this ); - - return 0; -} - - -sal_Int16 VCLXAccessiblePopupMenu::getAccessibleRole( ) -{ - OExternalLockGuard aGuard( this ); - - return AccessibleRole::POPUP_MENU; -} - - -// XAccessibleExtendedComponent - - -sal_Int32 VCLXAccessiblePopupMenu::getBackground( ) -{ - OExternalLockGuard aGuard( this ); - - return sal_Int32(Application::GetSettings().GetStyleSettings().GetMenuColor()); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |