summaryrefslogtreecommitdiff
path: root/accessibility/source/standard/accessiblemenubasecomponent.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'accessibility/source/standard/accessiblemenubasecomponent.cxx')
-rw-r--r--accessibility/source/standard/accessiblemenubasecomponent.cxx674
1 files changed, 0 insertions, 674 deletions
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: */