menubarmanager.cxx (796936d9) menubarmanager.cxx (dccf82be)
1/**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance

--- 43 unchanged lines hidden (view full) ---

52#include <com/sun/star/beans/XPropertySet.hpp>
53#include <com/sun/star/frame/XFramesSupplier.hpp>
54#include <com/sun/star/frame/XDesktop.hpp>
55#include <com/sun/star/container/XEnumeration.hpp>
56#include <com/sun/star/util/XStringWidth.hpp>
57#include <com/sun/star/uno/XComponentContext.hpp>
58#include <com/sun/star/lang/XMultiComponentFactory.hpp>
59#include <com/sun/star/frame/XPopupMenuController.hpp>
1/**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance

--- 43 unchanged lines hidden (view full) ---

52#include <com/sun/star/beans/XPropertySet.hpp>
53#include <com/sun/star/frame/XFramesSupplier.hpp>
54#include <com/sun/star/frame/XDesktop.hpp>
55#include <com/sun/star/container/XEnumeration.hpp>
56#include <com/sun/star/util/XStringWidth.hpp>
57#include <com/sun/star/uno/XComponentContext.hpp>
58#include <com/sun/star/lang/XMultiComponentFactory.hpp>
59#include <com/sun/star/frame/XPopupMenuController.hpp>
60#include <com/sun/star/frame/XUIControllerRegistration.hpp>
60#include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
61#ifndef _COM_SUN_STAR_LANG_XSYSTEMDEPENDENT_HPP_
62#include <com/sun/star/lang/SystemDependent.hpp>
63#endif
64#include <com/sun/star/ui/ItemType.hpp>
65#include <com/sun/star/ui/ImageType.hpp>
66#include <com/sun/star/container/XNameAccess.hpp>
67#include <com/sun/star/frame/XModuleManager.hpp>
68#include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>

--- 147 unchanged lines hidden (view full) ---

216 , m_bAcceleratorCfg( sal_False )
217 , m_bModuleIdentified( sal_False )
218 , m_aListenerContainer( m_aLock.getShareableOslMutex() )
219 , mxServiceFactory(xServiceFactory)
220 , m_xURLTransformer(_xURLTransformer)
221 , m_nSymbolsStyle( SvtMiscOptions().GetCurrentSymbolsStyle() )
222{
223 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::MenuBarManager" );
61#ifndef _COM_SUN_STAR_LANG_XSYSTEMDEPENDENT_HPP_
62#include <com/sun/star/lang/SystemDependent.hpp>
63#endif
64#include <com/sun/star/ui/ItemType.hpp>
65#include <com/sun/star/ui/ImageType.hpp>
66#include <com/sun/star/container/XNameAccess.hpp>
67#include <com/sun/star/frame/XModuleManager.hpp>
68#include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>

--- 147 unchanged lines hidden (view full) ---

216 , m_bAcceleratorCfg( sal_False )
217 , m_bModuleIdentified( sal_False )
218 , m_aListenerContainer( m_aLock.getShareableOslMutex() )
219 , mxServiceFactory(xServiceFactory)
220 , m_xURLTransformer(_xURLTransformer)
221 , m_nSymbolsStyle( SvtMiscOptions().GetCurrentSymbolsStyle() )
222{
223 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::MenuBarManager" );
224 m_xPopupMenuControllerRegistration = Reference< ::com::sun::star::frame::XUIControllerRegistration >(
225 getServiceFactory()->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.PopupMenuControllerFactory" ))),
226 UNO_QUERY );
224 m_xPopupMenuControllerFactory = frame::PopupMenuControllerFactory::create(
225 ::comphelper::getProcessComponentContext() );
227 FillMenuManager( pMenu, rFrame, rDispatchProvider, rModuleIdentifier, bDelete, bDeleteChildren );
228}
229
230// #110897#
231MenuBarManager::MenuBarManager(
232 const Reference< XMultiServiceFactory >& xServiceFactory,
233 const Reference< XFrame >& rFrame,
234 const Reference< XURLTransformer >& _xURLTransformer,

--- 189 unchanged lines hidden (view full) ---

424 m_xModuleImageManager.clear();
425 Reference< XComponent > xCompGAM( m_xGlobalAcceleratorManager, UNO_QUERY );
426 if ( xCompGAM.is() )
427 xCompGAM->dispose();
428 m_xGlobalAcceleratorManager.clear();
429 m_xModuleAcceleratorManager.clear();
430 m_xDocAcceleratorManager.clear();
431 m_xUICommandLabels.clear();
226 FillMenuManager( pMenu, rFrame, rDispatchProvider, rModuleIdentifier, bDelete, bDeleteChildren );
227}
228
229// #110897#
230MenuBarManager::MenuBarManager(
231 const Reference< XMultiServiceFactory >& xServiceFactory,
232 const Reference< XFrame >& rFrame,
233 const Reference< XURLTransformer >& _xURLTransformer,

--- 189 unchanged lines hidden (view full) ---

423 m_xModuleImageManager.clear();
424 Reference< XComponent > xCompGAM( m_xGlobalAcceleratorManager, UNO_QUERY );
425 if ( xCompGAM.is() )
426 xCompGAM->dispose();
427 m_xGlobalAcceleratorManager.clear();
428 m_xModuleAcceleratorManager.clear();
429 m_xDocAcceleratorManager.clear();
430 m_xUICommandLabels.clear();
432 m_xPopupMenuControllerRegistration.clear();
431 m_xPopupMenuControllerFactory.clear();
433 mxServiceFactory.clear();
434 }
435}
436
437void SAL_CALL MenuBarManager::addEventListener( const Reference< XEventListener >& xListener ) throw( RuntimeException )
438{
439 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::addEventListener" );
440 ResetableGuard aGuard( m_aLock );

--- 534 unchanged lines hidden (view full) ---

975
976 if ( m_bIsBookmarkMenu )
977 xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, pMenuItemHandler->aTargetFrame, 0 );
978 else
979 xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, ::rtl::OUString(), 0 );
980
981 sal_Bool bPopupMenu( sal_False );
982 if ( !pMenuItemHandler->xPopupMenuController.is() &&
432 mxServiceFactory.clear();
433 }
434}
435
436void SAL_CALL MenuBarManager::addEventListener( const Reference< XEventListener >& xListener ) throw( RuntimeException )
437{
438 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::addEventListener" );
439 ResetableGuard aGuard( m_aLock );

--- 534 unchanged lines hidden (view full) ---

974
975 if ( m_bIsBookmarkMenu )
976 xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, pMenuItemHandler->aTargetFrame, 0 );
977 else
978 xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, ::rtl::OUString(), 0 );
979
980 sal_Bool bPopupMenu( sal_False );
981 if ( !pMenuItemHandler->xPopupMenuController.is() &&
983 m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() ))
982 m_xPopupMenuControllerFactory->hasController( aItemCommand, rtl::OUString() ))
984 {
985 bPopupMenu = CreatePopupMenuController( pMenuItemHandler );
986 }
987 else if ( pMenuItemHandler->xPopupMenuController.is() )
988 {
989 // Force update of popup menu
990 pMenuItemHandler->xPopupMenuController->updatePopupMenu();
991 bPopupMenu = sal_True;

--- 225 unchanged lines hidden (view full) ---

1217
1218
1219sal_Bool MenuBarManager::CreatePopupMenuController( MenuItemHandler* pMenuItemHandler )
1220{
1221 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::CreatePopupMenuController" );
1222 rtl::OUString aItemCommand( pMenuItemHandler->aMenuItemURL );
1223
1224 // Try instanciate a popup menu controller. It is stored in the menu item handler.
983 {
984 bPopupMenu = CreatePopupMenuController( pMenuItemHandler );
985 }
986 else if ( pMenuItemHandler->xPopupMenuController.is() )
987 {
988 // Force update of popup menu
989 pMenuItemHandler->xPopupMenuController->updatePopupMenu();
990 bPopupMenu = sal_True;

--- 225 unchanged lines hidden (view full) ---

1216
1217
1218sal_Bool MenuBarManager::CreatePopupMenuController( MenuItemHandler* pMenuItemHandler )
1219{
1220 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::CreatePopupMenuController" );
1221 rtl::OUString aItemCommand( pMenuItemHandler->aMenuItemURL );
1222
1223 // Try instanciate a popup menu controller. It is stored in the menu item handler.
1225 Reference< XMultiComponentFactory > xPopupMenuControllerFactory( m_xPopupMenuControllerRegistration, UNO_QUERY );
1226 if ( xPopupMenuControllerFactory.is() )
1227 {
1228 Sequence< Any > aSeq( 2 );
1229 PropertyValue aPropValue;
1224 if ( !m_xPopupMenuControllerFactory.is() )
1225 return sal_False;
1230
1226
1231 aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModuleName" ));
1232 aPropValue.Value <<= m_aModuleIdentifier;
1233 aSeq[0] <<= aPropValue;
1234 aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Frame" ));
1235 aPropValue.Value <<= m_xFrame;
1236 aSeq[1] <<= aPropValue;
1227 Sequence< Any > aSeq( 2 );
1228 PropertyValue aPropValue;
1237
1229
1238 Reference< XComponentContext > xComponentContext;
1239 Reference< XPropertySet > xProps( getServiceFactory(), UNO_QUERY );
1230 aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ModuleIdentifier" ));
1231 aPropValue.Value <<= m_aModuleIdentifier;
1232 aSeq[0] <<= aPropValue;
1233 aPropValue.Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Frame" ));
1234 aPropValue.Value <<= m_xFrame;
1235 aSeq[1] <<= aPropValue;
1240
1236
1241 xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>=
1242 xComponentContext;
1237 Reference< XComponentContext > xComponentContext;
1238 Reference< XPropertySet > xProps( getServiceFactory(), UNO_QUERY );
1243
1239
1244 Reference< XPopupMenuController > xPopupMenuController(
1245 xPopupMenuControllerFactory->createInstanceWithArgumentsAndContext(
1246 aItemCommand,
1247 aSeq,
1248 xComponentContext ),
1249 UNO_QUERY );
1240 xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))) >>=
1241 xComponentContext;
1250
1242
1251 if ( xPopupMenuController.is() )
1252 {
1253 // Provide our awt popup menu to the popup menu controller
1254 pMenuItemHandler->xPopupMenuController = xPopupMenuController;
1255 xPopupMenuController->setPopupMenu( pMenuItemHandler->xPopupMenu );
1256 return sal_True;
1257 }
1243 Reference< XPopupMenuController > xPopupMenuController(
1244 m_xPopupMenuControllerFactory->createInstanceWithArgumentsAndContext(
1245 aItemCommand,
1246 aSeq,
1247 xComponentContext ),
1248 UNO_QUERY );
1249
1250 if ( xPopupMenuController.is() )
1251 {
1252 // Provide our awt popup menu to the popup menu controller
1253 pMenuItemHandler->xPopupMenuController = xPopupMenuController;
1254 xPopupMenuController->setPopupMenu( pMenuItemHandler->xPopupMenu );
1255 return sal_True;
1258 }
1259
1260 return sal_False;
1261}
1262
1263void MenuBarManager::FillMenuManager( Menu* pMenu, const Reference< XFrame >& rFrame, const Reference< XDispatchProvider >& rDispatchProvider, const rtl::OUString& rModuleIdentifier, sal_Bool bDelete, sal_Bool bDeleteChildren )
1264{
1265 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::FillMenuManager" );

--- 77 unchanged lines hidden (view full) ---

1343 // Retrieve module identifier from Help Command entry
1344 rtl::OUString aModuleIdentifier( rModuleIdentifier );
1345 if ( pMenu->GetHelpCommand( nItemId ).Len() > 0 )
1346 {
1347 aModuleIdentifier = pMenu->GetHelpCommand( nItemId );
1348 pMenu->SetHelpCommand( nItemId, aEmpty );
1349 }
1350
1256 }
1257
1258 return sal_False;
1259}
1260
1261void MenuBarManager::FillMenuManager( Menu* pMenu, const Reference< XFrame >& rFrame, const Reference< XDispatchProvider >& rDispatchProvider, const rtl::OUString& rModuleIdentifier, sal_Bool bDelete, sal_Bool bDeleteChildren )
1262{
1263 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "MenuBarManager::FillMenuManager" );

--- 77 unchanged lines hidden (view full) ---

1341 // Retrieve module identifier from Help Command entry
1342 rtl::OUString aModuleIdentifier( rModuleIdentifier );
1343 if ( pMenu->GetHelpCommand( nItemId ).Len() > 0 )
1344 {
1345 aModuleIdentifier = pMenu->GetHelpCommand( nItemId );
1346 pMenu->SetHelpCommand( nItemId, aEmpty );
1347 }
1348
1351 if ( m_xPopupMenuControllerRegistration.is() &&
1349 if ( m_xPopupMenuControllerFactory.is() &&
1352 pPopup->GetItemCount() == 0 &&
1350 pPopup->GetItemCount() == 0 &&
1353 m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() )
1351 m_xPopupMenuControllerFactory->hasController( aItemCommand, rtl::OUString() )
1354 )
1355 {
1356 // Check if we have to create a popup menu for a uno based popup menu controller.
1357 // We have to set an empty popup menu into our menu structure so the controller also
1358 // works with inplace OLE. Remove old dummy popup menu!
1359 MenuItemHandler* pItemHandler = new MenuItemHandler( nItemId, xStatusListener, xDispatch );
1360 VCLXPopupMenu* pVCLXPopupMenu = new VCLXPopupMenu;
1361 PopupMenu* pNewPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();

--- 120 unchanged lines hidden (view full) ---

1482 m_bRetrieveImages = sal_True;
1483 }
1484 m_bRetrieveImages = sal_True;
1485 }
1486
1487 MenuItemHandler* pItemHandler = new MenuItemHandler( nItemId, xStatusListener, xDispatch );
1488 pItemHandler->aMenuItemURL = aItemCommand;
1489
1352 )
1353 {
1354 // Check if we have to create a popup menu for a uno based popup menu controller.
1355 // We have to set an empty popup menu into our menu structure so the controller also
1356 // works with inplace OLE. Remove old dummy popup menu!
1357 MenuItemHandler* pItemHandler = new MenuItemHandler( nItemId, xStatusListener, xDispatch );
1358 VCLXPopupMenu* pVCLXPopupMenu = new VCLXPopupMenu;
1359 PopupMenu* pNewPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();

--- 120 unchanged lines hidden (view full) ---

1480 m_bRetrieveImages = sal_True;
1481 }
1482 m_bRetrieveImages = sal_True;
1483 }
1484
1485 MenuItemHandler* pItemHandler = new MenuItemHandler( nItemId, xStatusListener, xDispatch );
1486 pItemHandler->aMenuItemURL = aItemCommand;
1487
1490 if ( m_xPopupMenuControllerRegistration.is() &&
1491 m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() ))
1488 if ( m_xPopupMenuControllerFactory.is() &&
1489 m_xPopupMenuControllerFactory->hasController( aItemCommand, rtl::OUString() ))
1492 {
1493 // Check if we have to create a popup menu for a uno based popup menu controller.
1494 // We have to set an empty popup menu into our menu structure so the controller also
1495 // works with inplace OLE.
1496 VCLXPopupMenu* pVCLXPopupMenu = new VCLXPopupMenu;
1497 PopupMenu* pPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();
1498 pMenu->SetPopupMenu( pItemHandler->nItemId, pPopupMenu );
1499 pItemHandler->xPopupMenu = Reference< com::sun::star::awt::XPopupMenu >( (OWeakObject *)pVCLXPopupMenu, UNO_QUERY );

--- 565 unchanged lines hidden (view full) ---

2065 m_bDeleteMenu = bDelete;
2066 m_bDeleteChildren = bDeleteChildren;
2067 m_pVCLMenu = pAddonMenu;
2068 m_xFrame = rFrame;
2069 m_bInitialized = sal_False;
2070 m_bIsBookmarkMenu = sal_True;
2071
2072 rtl::OUString aModuleIdentifier;
1490 {
1491 // Check if we have to create a popup menu for a uno based popup menu controller.
1492 // We have to set an empty popup menu into our menu structure so the controller also
1493 // works with inplace OLE.
1494 VCLXPopupMenu* pVCLXPopupMenu = new VCLXPopupMenu;
1495 PopupMenu* pPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();
1496 pMenu->SetPopupMenu( pItemHandler->nItemId, pPopupMenu );
1497 pItemHandler->xPopupMenu = Reference< com::sun::star::awt::XPopupMenu >( (OWeakObject *)pVCLXPopupMenu, UNO_QUERY );

--- 565 unchanged lines hidden (view full) ---

2063 m_bDeleteMenu = bDelete;
2064 m_bDeleteChildren = bDeleteChildren;
2065 m_pVCLMenu = pAddonMenu;
2066 m_xFrame = rFrame;
2067 m_bInitialized = sal_False;
2068 m_bIsBookmarkMenu = sal_True;
2069
2070 rtl::OUString aModuleIdentifier;
2073 m_xPopupMenuControllerRegistration = Reference< ::com::sun::star::frame::XUIControllerRegistration >(
2074 getServiceFactory()->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.PopupMenuControllerFactory" ))),
2075 UNO_QUERY );
2071 m_xPopupMenuControllerFactory = frame::PopupMenuControllerFactory::create(
2072 ::comphelper::getProcessComponentContext());
2076
2077 const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
2078 m_bWasHiContrast = rSettings.GetHighContrastMode();
2079
2080 Reference< XStatusListener > xStatusListener;
2081 Reference< XDispatch > xDispatch;
2082 sal_uInt16 nItemCount = pAddonMenu->GetItemCount();
2083 ::rtl::OUString aItemCommand;

--- 34 unchanged lines hidden (view full) ---

2118 }
2119
2120 pMenuItemHandler->aMenuItemURL = aItemCommand;
2121 if ( _bHandlePopUp )
2122 {
2123 // Check if we have to create a popup menu for a uno based popup menu controller.
2124 // We have to set an empty popup menu into our menu structure so the controller also
2125 // works with inplace OLE.
2073
2074 const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
2075 m_bWasHiContrast = rSettings.GetHighContrastMode();
2076
2077 Reference< XStatusListener > xStatusListener;
2078 Reference< XDispatch > xDispatch;
2079 sal_uInt16 nItemCount = pAddonMenu->GetItemCount();
2080 ::rtl::OUString aItemCommand;

--- 34 unchanged lines hidden (view full) ---

2115 }
2116
2117 pMenuItemHandler->aMenuItemURL = aItemCommand;
2118 if ( _bHandlePopUp )
2119 {
2120 // Check if we have to create a popup menu for a uno based popup menu controller.
2121 // We have to set an empty popup menu into our menu structure so the controller also
2122 // works with inplace OLE.
2126 if ( m_xPopupMenuControllerRegistration.is() &&
2127 m_xPopupMenuControllerRegistration->hasController( aItemCommand, rtl::OUString() ))
2123 if ( m_xPopupMenuControllerFactory.is() &&
2124 m_xPopupMenuControllerFactory->hasController( aItemCommand, rtl::OUString() ))
2128 {
2129 VCLXPopupMenu* pVCLXPopupMenu = new VCLXPopupMenu;
2130 PopupMenu* pCtlPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();
2131 pAddonMenu->SetPopupMenu( pMenuItemHandler->nItemId, pCtlPopupMenu );
2132 pMenuItemHandler->xPopupMenu = Reference< com::sun::star::awt::XPopupMenu >( (OWeakObject *)pVCLXPopupMenu, UNO_QUERY );
2133
2134 }
2135 }

--- 22 unchanged lines hidden ---
2125 {
2126 VCLXPopupMenu* pVCLXPopupMenu = new VCLXPopupMenu;
2127 PopupMenu* pCtlPopupMenu = (PopupMenu *)pVCLXPopupMenu->GetMenu();
2128 pAddonMenu->SetPopupMenu( pMenuItemHandler->nItemId, pCtlPopupMenu );
2129 pMenuItemHandler->xPopupMenu = Reference< com::sun::star::awt::XPopupMenu >( (OWeakObject *)pVCLXPopupMenu, UNO_QUERY );
2130
2131 }
2132 }

--- 22 unchanged lines hidden ---