Kaydet (Commit) 08fe2669 authored tarafından Rüdiger Timm's avatar Rüdiger Timm

INTEGRATION: CWS tbe22 (1.25.30); FILE MERGED

2005/05/04 14:21:00 tbe 1.25.30.1: #i48612# Opening a menu with GOK shows Tips instead of entries (fixed by CD)
üst 1dc0e705
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: menubarmanager.cxx,v $ * $RCSfile: menubarmanager.cxx,v $
* *
* $Revision: 1.25 $ * $Revision: 1.26 $
* *
* last change: $Author: rt $ $Date: 2005-03-29 15:49:25 $ * last change: $Author: rt $ $Date: 2005-05-13 07:29:54 $
* *
* The Contents of this file are made available subject to the terms of * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -1236,44 +1236,7 @@ IMPL_LINK( MenuBarManager, Activate, Menu *, pMenu ) ...@@ -1236,44 +1236,7 @@ IMPL_LINK( MenuBarManager, Activate, Menu *, pMenu )
if ( !pMenuItemHandler->xPopupMenuController.is() && if ( !pMenuItemHandler->xPopupMenuController.is() &&
m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() )) m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() ))
{ {
// Try instanciate a popup menu controller. It is stored in the menu item handler. bPopupMenu = CreatePopupMenuController( pMenuItemHandler );
Reference< XMultiComponentFactory > xPopupMenuControllerFactory( m_xPopupMenuControllerRegistration, UNO_QUERY );
if ( xPopupMenuControllerFactory.is() )
{
Sequence< Any > aSeq( 2 );
PropertyValue aPropValue;
aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModuleName" ));
aPropValue.Value <<= m_aModuleIdentifier;
aSeq[0] <<= aPropValue;
aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Frame" ));
aPropValue.Value <<= m_xFrame;
aSeq[1] <<= aPropValue;
Reference< XComponentContext > xComponentContext;
// #110897#
// Reference< XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY );
Reference< XPropertySet > xProps( getServiceFactory(), UNO_QUERY );
xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>=
xComponentContext;
Reference< XPopupMenuController > xPopupMenuController(
xPopupMenuControllerFactory->createInstanceWithArgumentsAndContext(
aItemCommand,
aSeq,
xComponentContext ),
UNO_QUERY );
if ( xPopupMenuController.is() )
{
// Provide our awt popup menu to the popup menu controller
pMenuItemHandler->xPopupMenuController = xPopupMenuController;
xPopupMenuController->setPopupMenu( pMenuItemHandler->xPopupMenu );
bPopupMenu = sal_True;
}
}
} }
else if ( pMenuItemHandler->xPopupMenuController.is() ) else if ( pMenuItemHandler->xPopupMenuController.is() )
{ {
...@@ -1493,6 +1456,49 @@ String MenuBarManager::RetrieveLabelFromCommand( const String& aCmdURL ) ...@@ -1493,6 +1456,49 @@ String MenuBarManager::RetrieveLabelFromCommand( const String& aCmdURL )
return aLabel; return aLabel;
} }
sal_Bool MenuBarManager::CreatePopupMenuController( MenuItemHandler* pMenuItemHandler )
{
rtl::OUString aItemCommand( pMenuItemHandler->aMenuItemURL );
// Try instanciate a popup menu controller. It is stored in the menu item handler.
Reference< XMultiComponentFactory > xPopupMenuControllerFactory( m_xPopupMenuControllerRegistration, UNO_QUERY );
if ( xPopupMenuControllerFactory.is() )
{
Sequence< Any > aSeq( 2 );
PropertyValue aPropValue;
aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModuleName" ));
aPropValue.Value <<= m_aModuleIdentifier;
aSeq[0] <<= aPropValue;
aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Frame" ));
aPropValue.Value <<= m_xFrame;
aSeq[1] <<= aPropValue;
Reference< XComponentContext > xComponentContext;
Reference< XPropertySet > xProps( getServiceFactory(), UNO_QUERY );
xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>=
xComponentContext;
Reference< XPopupMenuController > xPopupMenuController(
xPopupMenuControllerFactory->createInstanceWithArgumentsAndContext(
aItemCommand,
aSeq,
xComponentContext ),
UNO_QUERY );
if ( xPopupMenuController.is() )
{
// Provide our awt popup menu to the popup menu controller
pMenuItemHandler->xPopupMenuController = xPopupMenuController;
xPopupMenuController->setPopupMenu( pMenuItemHandler->xPopupMenu );
return sal_True;
}
}
return sal_False;
}
void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, const rtl::OUString& rModuleIdentifier, sal_Bool bDelete, sal_Bool bDeleteChildren ) void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, const rtl::OUString& rModuleIdentifier, sal_Bool bDelete, sal_Bool bDeleteChildren )
{ {
m_xFrame = rFrame; m_xFrame = rFrame;
...@@ -1539,7 +1545,8 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, ...@@ -1539,7 +1545,8 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame,
framework::AddonMenuManager::MergeAddonHelpMenu( rFrame, (MenuBar *)pMenu ); framework::AddonMenuManager::MergeAddonHelpMenu( rFrame, (MenuBar *)pMenu );
} }
String aEmpty; String aEmpty;
sal_Bool bAccessibilityEnabled( Application::GetSettings().GetMiscSettings().GetEnableATToolSupport() );
int nItemCount = pMenu->GetItemCount(); int nItemCount = pMenu->GetItemCount();
for ( int i = 0; i < nItemCount; i++ ) for ( int i = 0; i < nItemCount; i++ )
{ {
...@@ -1553,7 +1560,8 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, ...@@ -1553,7 +1560,8 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame,
pMenu->SetItemCommand( nItemId, aItemCommand ); pMenu->SetItemCommand( nItemId, aItemCommand );
} }
if ( pMenu->IsMenuBar() && ( pMenu->GetItemText( nItemId ).Len() == 0 )) if (( pMenu->IsMenuBar() && ( pMenu->GetItemText( nItemId ).Len() == 0 )) ||
bAccessibilityEnabled )
{ {
if ( aItemCommand.getLength() > 0 ) if ( aItemCommand.getLength() > 0 )
pMenu->SetItemText( nItemId, RetrieveLabelFromCommand( aItemCommand )); pMenu->SetItemText( nItemId, RetrieveLabelFromCommand( aItemCommand ));
...@@ -1594,6 +1602,12 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, ...@@ -1594,6 +1602,12 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame,
pItemHandler->aMenuItemURL = aItemCommand; pItemHandler->aMenuItemURL = aItemCommand;
m_aMenuItemHandlerVector.push_back( pItemHandler ); m_aMenuItemHandlerVector.push_back( pItemHandler );
delete pPopupMenu; delete pPopupMenu;
if ( bAccessibilityEnabled )
{
if ( CreatePopupMenuController( pItemHandler ))
pItemHandler->xPopupMenuController->updatePopupMenu();
}
} }
else if (( aItemCommand.getLength() > nAddonsURLPrefixLength ) && else if (( aItemCommand.getLength() > nAddonsURLPrefixLength ) &&
( aItemCommand.indexOf( ADDONSPOPUPMENU_URL_PREFIX ) == 0 )) ( aItemCommand.indexOf( ADDONSPOPUPMENU_URL_PREFIX ) == 0 ))
...@@ -1726,7 +1740,7 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, ...@@ -1726,7 +1740,7 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame,
pItemHandler->aMenuItemURL = aItemCommand; pItemHandler->aMenuItemURL = aItemCommand;
if ( m_xPopupMenuControllerRegistration.is() && if ( m_xPopupMenuControllerRegistration.is() &&
m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() )) m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() ))
{ {
// Check if we have to create a popup menu for a uno based popup menu controller. // Check if we have to create a popup menu for a uno based popup menu controller.
// We have to set an empty popup menu into our menu structure so the controller also // We have to set an empty popup menu into our menu structure so the controller also
...@@ -1735,6 +1749,12 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, ...@@ -1735,6 +1749,12 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame,
PopupMenu* pPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu(); PopupMenu* pPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();
pMenu->SetPopupMenu( pItemHandler->nItemId, pPopupMenu ); pMenu->SetPopupMenu( pItemHandler->nItemId, pPopupMenu );
pItemHandler->xPopupMenu = Reference< com::sun::star::awt::XPopupMenu >( (OWeakObject *)pVCLXPopupMenu, UNO_QUERY ); pItemHandler->xPopupMenu = Reference< com::sun::star::awt::XPopupMenu >( (OWeakObject *)pVCLXPopupMenu, UNO_QUERY );
if ( bAccessibilityEnabled )
{
if ( CreatePopupMenuController( pItemHandler ))
pItemHandler->xPopupMenuController->updatePopupMenu();
}
} }
m_aMenuItemHandlerVector.push_back( pItemHandler ); m_aMenuItemHandlerVector.push_back( pItemHandler );
...@@ -1743,6 +1763,26 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame, ...@@ -1743,6 +1763,26 @@ void MenuBarManager::FillMenuManager( Menu* pMenu, Reference< XFrame >& rFrame,
} }
} }
if ( bAccessibilityEnabled )
{
RetrieveShortcuts( m_aMenuItemHandlerVector );
std::vector< MenuItemHandler* >::iterator p;
for ( p = m_aMenuItemHandlerVector.begin(); p != m_aMenuItemHandlerVector.end(); p++ )
{
MenuItemHandler* pMenuItemHandler = *p;
// Set key code, workaround for hard-coded shortcut F1 mapped to .uno:HelpIndex
// Only non-popup menu items can have a short-cut
if ( pMenuItemHandler->aMenuItemURL == aCmdHelpIndex )
{
KeyCode aKeyCode( KEY_F1 );
pMenu->SetAccelKey( pMenuItemHandler->nItemId, aKeyCode );
}
else if ( pMenu->GetPopupMenu( pMenuItemHandler->nItemId ) == 0 )
pMenu->SetAccelKey( pMenuItemHandler->nItemId, pMenuItemHandler->aKeyCode );
}
}
m_pVCLMenu->SetHighlightHdl( LINK( this, MenuBarManager, Highlight )); m_pVCLMenu->SetHighlightHdl( LINK( this, MenuBarManager, Highlight ));
m_pVCLMenu->SetActivateHdl( LINK( this, MenuBarManager, Activate )); m_pVCLMenu->SetActivateHdl( LINK( this, MenuBarManager, Activate ));
m_pVCLMenu->SetDeactivateHdl( LINK( this, MenuBarManager, Deactivate )); m_pVCLMenu->SetDeactivateHdl( LINK( this, MenuBarManager, Deactivate ));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment