allow disabling file/new, wizards, recent documents menu entries

disabling the dispatches '.uno:AutoPilotMenu' and '.uno:AddDirect' and
.uno:RecentFileList via UNO API now results in disabled
menu entries as expected

Change-Id: Id99be9374306ff8c0cea919ea94ed96f715a8058
Reviewed-on: https://gerrit.libreoffice.org/22422
Reviewed-by: Oliver Specht <oliver.specht@cib.de>
Tested-by: Oliver Specht <oliver.specht@cib.de>
This commit is contained in:
Oliver Specht
2016-02-17 12:07:59 +01:00
parent fa20b651d6
commit a6e8910a3c
3 changed files with 47 additions and 36 deletions

View File

@@ -177,12 +177,26 @@ MenuManager::MenuManager(
} }
else else
{ {
if ( nItemId == SID_NEWDOCDIRECT || aItemCommand == aSlotNewDocDirect ) bool isNewDoc = nItemId == SID_NEWDOCDIRECT || aItemCommand == aSlotNewDocDirect;
bool isAutoPilot = nItemId == SID_AUTOPILOTMENU || aItemCommand == aSlotAutoPilot;
if(isNewDoc || isAutoPilot)
{
Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY );
URL aTargetURL;
aTargetURL.Complete = OUString::createFromAscii(isNewDoc ? aSlotNewDocDirect : aSlotAutoPilot);
m_xURLTransformer->parseStrict( aTargetURL );
Reference< XDispatch > xMenuItemDispatch = xDispatchProvider->queryDispatch(
aTargetURL, OUString(), 0 );
if(xMenuItemDispatch == nullptr)
{
m_pVCLMenu->EnableItem( nItemId, false );
}
else
{ {
MenuConfiguration aMenuCfg( m_xContext ); MenuConfiguration aMenuCfg( m_xContext );
BmkMenu* pSubMenu = static_cast<BmkMenu*>(aMenuCfg.CreateBookmarkMenu( rFrame, BOOKMARK_NEWMENU )); BmkMenu* pSubMenu = static_cast<BmkMenu*>(aMenuCfg.CreateBookmarkMenu( rFrame,
OUString::createFromAscii(isNewDoc ? BOOKMARK_NEWMENU : BOOKMARK_WIZARDMENU)));
pMenu->SetPopupMenu( nItemId, pSubMenu ); pMenu->SetPopupMenu( nItemId, pSubMenu );
AddMenu(pSubMenu,OUString(),nItemId,true,false); AddMenu(pSubMenu,OUString(),nItemId,true,false);
if ( bShowMenuImages && !pMenu->GetItemImage( nItemId )) if ( bShowMenuImages && !pMenu->GetItemImage( nItemId ))
{ {
@@ -191,20 +205,6 @@ MenuManager::MenuManager(
pMenu->SetItemImage( nItemId, aImage ); pMenu->SetItemImage( nItemId, aImage );
} }
} }
else if ( nItemId == SID_AUTOPILOTMENU || aItemCommand == aSlotAutoPilot )
{
MenuConfiguration aMenuCfg( m_xContext );
BmkMenu* pSubMenu = static_cast<BmkMenu*>(aMenuCfg.CreateBookmarkMenu( rFrame, BOOKMARK_WIZARDMENU ));
pMenu->SetPopupMenu( nItemId, pSubMenu );
AddMenu(pSubMenu,OUString(),nItemId,true,false);
if ( bShowMenuImages && !pMenu->GetItemImage( nItemId ))
{
Image aImage = vcl::CommandInfoProvider::Instance().GetImageForCommand(aItemCommand, false, rFrame );
if ( !!aImage )
pMenu->SetItemImage( nItemId, aImage );
}
} }
else if ( pMenu->GetItemType( i ) != MenuItemType::SEPARATOR ) else if ( pMenu->GetItemType( i ) != MenuItemType::SEPARATOR )
{ {

View File

@@ -867,6 +867,8 @@ IMPL_LINK_TYPED( MenuBarManager, Activate, Menu *, pMenu, bool )
xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, OUString(), 0 ); xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, OUString(), 0 );
bool bPopupMenu( false ); bool bPopupMenu( false );
if(xMenuItemDispatch != nullptr)
{
if ( !pMenuItemHandler->xPopupMenuController.is() && if ( !pMenuItemHandler->xPopupMenuController.is() &&
m_xPopupMenuControllerFactory->hasController( aItemCommand, m_aModuleIdentifier ) ) m_xPopupMenuControllerFactory->hasController( aItemCommand, m_aModuleIdentifier ) )
{ {
@@ -880,7 +882,7 @@ IMPL_LINK_TYPED( MenuBarManager, Activate, Menu *, pMenu, bool )
if (PopupMenu* pThisPopup = pMenu->GetPopupMenu( pMenuItemHandler->nItemId )) if (PopupMenu* pThisPopup = pMenu->GetPopupMenu( pMenuItemHandler->nItemId ))
pMenu->EnableItem( pMenuItemHandler->nItemId, pThisPopup->GetItemCount() != 0 ); pMenu->EnableItem( pMenuItemHandler->nItemId, pThisPopup->GetItemCount() != 0 );
} }
}
lcl_CheckForChildren(pMenu, pMenuItemHandler->nItemId); lcl_CheckForChildren(pMenu, pMenuItemHandler->nItemId);
if ( xMenuItemDispatch.is() ) if ( xMenuItemDispatch.is() )

View File

@@ -48,6 +48,8 @@
#include <memory> #include <memory>
// Defines // Defines
#define aSlotNewDocDirect ".uno:AddDirect"
#define aSlotAutoPilot ".uno:AutoPilotMenu"
using namespace com::sun::star::uno; using namespace com::sun::star::uno;
using namespace com::sun::star::lang; using namespace com::sun::star::lang;
@@ -332,6 +334,13 @@ void NewMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu >& rPopup
MenuConfiguration aMenuCfg( m_xContext ); MenuConfiguration aMenuCfg( m_xContext );
std::unique_ptr<BmkMenu> pSubMenu; std::unique_ptr<BmkMenu> pSubMenu;
Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY );
URL aTargetURL;
aTargetURL.Complete = rtl::OUString::createFromAscii(m_bNewMenu ? aSlotNewDocDirect : aSlotAutoPilot);
m_xURLTransformer->parseStrict( aTargetURL );
Reference< XDispatch > xMenuItemDispatch = xDispatchProvider->queryDispatch( aTargetURL, OUString(), 0 );
if(xMenuItemDispatch == nullptr)
return;
if ( m_bNewMenu ) if ( m_bNewMenu )
pSubMenu.reset(static_cast<BmkMenu*>(aMenuCfg.CreateBookmarkMenu( m_xFrame, BOOKMARK_NEWMENU ))); pSubMenu.reset(static_cast<BmkMenu*>(aMenuCfg.CreateBookmarkMenu( m_xFrame, BOOKMARK_NEWMENU )));
else else
@@ -522,7 +531,7 @@ void SAL_CALL NewMenuController::initialize( const Sequence< Any >& aArguments )
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings(); const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
m_bShowImages = rSettings.GetUseImagesInMenus(); m_bShowImages = rSettings.GetUseImagesInMenus();
m_bNewMenu = m_aCommandURL == ".uno:AddDirect"; m_bNewMenu = m_aCommandURL == aSlotNewDocDirect;
} }
} }
} }