diff options
author | Carsten Driesner <cd@openoffice.org> | 2001-05-04 16:48:14 +0000 |
---|---|---|
committer | Carsten Driesner <cd@openoffice.org> | 2001-05-04 16:48:14 +0000 |
commit | 47cc93053887ea29c20e03d7edfa50b3327f2ae8 (patch) | |
tree | 95c9eb3b8ddfe1ea32281f2dbf64bf69c24e4181 /framework | |
parent | d2fa97368c0133a8414db503a592a87d8a56bc0e (diff) |
Feature support for XDispatchInformationProvider
Diffstat (limited to 'framework')
-rw-r--r-- | framework/source/classes/menumanager.cxx | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/framework/source/classes/menumanager.cxx b/framework/source/classes/menumanager.cxx index 37fd745658fe..7ad3f8ec446a 100644 --- a/framework/source/classes/menumanager.cxx +++ b/framework/source/classes/menumanager.cxx @@ -2,9 +2,9 @@ * * $RCSfile: menumanager.cxx,v $ * - * $Revision: 1.8 $ + * $Revision: 1.9 $ * - * last change: $Author: cd $ $Date: 2001-05-04 06:39:52 $ + * last change: $Author: cd $ $Date: 2001-05-04 17:48:14 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -104,6 +104,11 @@ #ifndef _COM_SUN_STAR_CONTAINER_XENUMERATION_HPP_ #include <com/sun/star/container/XEnumeration.hpp> #endif +#if SUPD > 631 +#ifndef _COM_SUN_STAR_FRAME_XDISPATCHINFORMATIONPROVIDER_HPP_ +#include <com/sun/star/frame/XDispatchInformationProvider.hpp> +#endif +#endif // SUPD //_________________________________________________________________________________________________________________ // includes of other projects @@ -189,6 +194,8 @@ MenuManager::MenuManager( REFERENCE< XFRAME >& rFrame, Menu* pMenu, sal_Bool bDe m_bIsBookmarkMenu = sal_False; SAL_STATIC_CAST( ::com::sun::star::uno::XInterface*, (OWeakObject*)this )->acquire(); + ::std::vector< USHORT > aQueryLabelItemIdVector; + int nItemCount = pMenu->GetItemCount(); for ( int i = 0; i < nItemCount; i++ ) { @@ -207,7 +214,7 @@ MenuManager::MenuManager( REFERENCE< XFRAME >& rFrame, Menu* pMenu, sal_Bool bDe { MenuManager* pSubMenuManager = new MenuManager( rFrame, pPopupMenu, bDeleteChildren, bDeleteChildren ); - // store menu item command as we later have to know which menu is active (see Acivate handler) + // store menu item command as we later have to know which menu is active (see Activate handler) pSubMenuManager->m_aMenuItemCommand = aItemCommand; MenuItemHandler* pMenuItemHandler = new MenuItemHandler( @@ -215,6 +222,8 @@ MenuManager::MenuManager( REFERENCE< XFRAME >& rFrame, Menu* pMenu, sal_Bool bDe pSubMenuManager, REFERENCE< XDISPATCH >() ); m_aMenuItemHandlerVector.push_back( pMenuItemHandler ); + if ( pMenu->GetItemText( nItemId ).Len() == 0 ) + aQueryLabelItemIdVector.push_back( nItemId ); } else { @@ -228,6 +237,8 @@ MenuManager::MenuManager( REFERENCE< XFRAME >& rFrame, Menu* pMenu, sal_Bool bDe nItemId, pSubMenuManager, REFERENCE< XDISPATCH >() ); + if ( pMenu->GetItemText( nItemId ).Len() == 0 ) + aQueryLabelItemIdVector.push_back( nItemId ); } else if ( nItemId == SID_AUTOPILOTMENU || aItemCommand == aSlotAutoPilot ) @@ -239,6 +250,8 @@ MenuManager::MenuManager( REFERENCE< XFRAME >& rFrame, Menu* pMenu, sal_Bool bDe nItemId, pSubMenuManager, REFERENCE< XDISPATCH >() ); + if ( pMenu->GetItemText( nItemId ).Len() == 0 ) + aQueryLabelItemIdVector.push_back( nItemId ); } else if ( pMenu->GetItemType( i ) != MENUITEM_SEPARATOR ) { @@ -247,10 +260,35 @@ MenuManager::MenuManager( REFERENCE< XFRAME >& rFrame, Menu* pMenu, sal_Bool bDe pMenu->SetItemImage( nItemId, aImage ); m_aMenuItemHandlerVector.push_back( new MenuItemHandler( nItemId, NULL, REFERENCE< XDISPATCH >() )); + if ( pMenu->GetItemText( nItemId ).Len() == 0 ) + aQueryLabelItemIdVector.push_back( nItemId ); } } } + + // retrieve label information for all menu items without item text +#if SUPD > 631 + if ( aQueryLabelItemIdVector.size() > 0 ) + { + Sequence< ::rtl::OUString > aURLSequence( aQueryLabelItemIdVector.size() ); + Sequence< ::rtl::OUString > aLabelSequence( aQueryLabelItemIdVector.size() ); + + sal_uInt32 nPos = 0; + ::std::vector< USHORT >::iterator p; + for ( p = aQueryLabelItemIdVector.begin(); p != aQueryLabelItemIdVector.end(); p++ ) + aURLSequence[nPos++] = pMenu->GetItemCommand( *p ); + + Reference< XDispatchInformationProvider > xDIP( xFrame, UNO_QUERY ); + if ( xDIP.is() ) + { + nPos = 0; + xDIP->queryDispatchInformations( aURLSequence, aLabelSequence ); + for ( p = aQueryLabelItemIdVector.begin(); p != aQueryLabelItemIdVector.end(); p++ ) + pMenu->SetItemText( *p, aLabelSequence( nPos++ )); + } + } +#endif m_pVCLMenu->SetHighlightHdl( LINK( this, MenuManager, Highlight )); m_pVCLMenu->SetActivateHdl( LINK( this, MenuManager, Activate )); m_pVCLMenu->SetDeactivateHdl( LINK( this, MenuManager, Deactivate )); @@ -851,8 +889,6 @@ IMPL_LINK( MenuManager, Deactivate, Menu *, pMenu ) IMPL_LINK( MenuManager, Select, Menu *, pMenu ) { - LOCK_MUTEX( aGuard, m_aMutex, "MenuManager::Select" ) - if ( pMenu == m_pVCLMenu ) { USHORT nCurItemId = pMenu->GetCurItemId(); @@ -862,8 +898,6 @@ IMPL_LINK( MenuManager, Select, Menu *, pMenu ) nCurItemId <= END_ITEMID_WINDOWLIST ) { // window list menu item selected - UNLOCK_MUTEX( aGuard, m_aMutex ) - Reference< XTasksSupplier > xDesktop( ::comphelper::getProcessServiceFactory()->createInstance( DESKTOP_SERVICE ), UNO_QUERY ); USHORT nWindowItemId = START_ITEMID_WINDOWLIST; @@ -880,7 +914,6 @@ IMPL_LINK( MenuManager, Select, Menu *, pMenu ) if ( xTask.is() && nTaskId == nCurItemId ) { Window* pWin = VCLUnoHelper::GetWindow( xTask->getContainerWindow() ); - UNLOCK_MUTEX( aGuard, m_aMutex ) pWin->GrabFocus(); break; } |