Kaydet (Commit) 53be2234 authored tarafından Maxim Monastirsky's avatar Maxim Monastirsky

Convert MENU_BROWSER_DEFAULTCONTEXT to xml

Change-Id: If59ecb4ea92d9daf423aef870e79248f5bc93e6d
üst 1028e519
......@@ -14,6 +14,7 @@ $(eval $(call gb_UIConfig_add_menubarfiles,modules/dbbrowser,\
))
$(eval $(call gb_UIConfig_add_popupmenufiles,modules/dbbrowser,\
dbaccess/uiconfig/dbbrowser/popupmenu/explorer \
dbaccess/uiconfig/dbbrowser/popupmenu/refreshdata \
))
......
......@@ -32,8 +32,6 @@
#define HID_BROWSER_COLUMNWIDTH "DBACCESS_HID_BROWSER_COLUMNWIDTH"
#define HID_BROWSER_TABLEFORMAT "DBACCESS_HID_BROWSER_TABLEFORMAT"
#define HID_BROWSER_ROWHEIGHT "DBACCESS_HID_BROWSER_ROWHEIGHT"
#define HID_BROWSER_EDIT_DATABASE "DBACCESS_HID_BROWSER_EDIT_DATABASE"
#define HID_BROWSER_CLOSECONN "DBACCESS_HID_BROWSER_CLOSECONN"
#define HID_CTL_QRYSQLEDIT "DBACCESS_HID_CTL_QRYSQLEDIT"
......@@ -124,24 +122,6 @@
#define HID_DBWIZ_CANCEL "DBACCESS_HID_DBWIZ_CANCEL"
#define HID_DBWIZ_FINISH "DBACCESS_HID_DBWIZ_FINISH"
#define HID_BROWSER_ADMINISTRATE "DBACCESS_HID_BROWSER_ADMINISTRATE"
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -2281,11 +2281,6 @@ OUString OApplicationController::getContextMenuResourceName( Control& /*_rContro
return OUString("edit");
}
VclPtr<PopupMenu> OApplicationController::getContextMenu( Control& /*_rControl*/ ) const
{
return nullptr;
}
IController& OApplicationController::getCommandController()
{
return *this;
......
......@@ -497,7 +497,6 @@ namespace dbaui
// IContextMenuProvider
virtual OUString getContextMenuResourceName( Control& _rControl ) const override;
virtual VclPtr<PopupMenu> getContextMenu( Control& _rControl ) const override;
virtual IController& getCommandController() override;
virtual ::comphelper::OInterfaceContainerHelper2*
getContextMenuInterceptors() override;
......
......@@ -156,6 +156,10 @@ void SbaTableQueryBrowser::describeSupportedFeatures()
implDescribeSupportedFeature( ".uno:Title", ID_BROWSER_TITLE );
if ( !m_bShowMenu )
{
implDescribeSupportedFeature( ".uno:DSBEditDB", ID_TREE_EDIT_DATABASE );
implDescribeSupportedFeature( ".uno:DSBCloseConnection", ID_TREE_CLOSE_CONN );
implDescribeSupportedFeature( ".uno:DSBAdministrate", ID_TREE_ADMINISTRATE );
implDescribeSupportedFeature( ".uno:DSBrowserExplorer", ID_BROWSER_EXPLORER, CommandGroup::VIEW );
implDescribeSupportedFeature( ".uno:DSBFormLetter", ID_BROWSER_FORMLETTER, CommandGroup::DOCUMENT );
......
......@@ -55,44 +55,6 @@ String RID_STR_TABLES_CONTAINER
Text [ en-US ] = "Tables";
};
Menu MENU_BROWSER_DEFAULTCONTEXT
{
ItemList =
{
MenuItem
{
Identifier = ID_TREE_EDIT_DATABASE ;
HelpId = HID_BROWSER_EDIT_DATABASE ;
Text [ en-US ] = "Edit ~Database File..." ;
};
MenuItem
{
Identifier = ID_TREE_CLOSE_CONN ;
HelpId = HID_BROWSER_CLOSECONN ;
Text [ en-US ] = "Disco~nnect" ;
};
MenuItem
{
Separator = TRUE;
};
MenuItem {
Identifier = SID_COPY ;
Command = ".uno:Copy" ;
Text [ en-US ] = "~Copy" ;
};
MenuItem
{
Separator = TRUE;
};
MenuItem
{
Identifier = ID_TREE_ADMINISTRATE ;
HelpId = HID_BROWSER_ADMINISTRATE;
Text [ en-US ] = "Registered databases ..." ;
};
};
};
String STR_TITLE_CONFIRM_DELETION
{
Text [ en-US ] = "Confirm Deletion" ;
......
......@@ -3468,19 +3468,14 @@ bool SbaTableQueryBrowser::requestQuickHelp( const SvTreeListEntry* _pEntry, OUS
return false;
}
OUString SbaTableQueryBrowser::getContextMenuResourceName( Control& ) const
{
return OUString();
}
VclPtr<PopupMenu> SbaTableQueryBrowser::getContextMenu( Control& _rControl ) const
OUString SbaTableQueryBrowser::getContextMenuResourceName( Control& _rControl ) const
{
OSL_PRECOND( &m_pTreeView->getListBox() == &_rControl,
"SbaTableQueryBrowser::getContextMenu: where does this come from?" );
"SbaTableQueryBrowser::getContextMenuResourceName: where does this come from?" );
if ( &m_pTreeView->getListBox() != &_rControl )
return nullptr;
return OUString();
return VclPtr<PopupMenu>::Create( ModuleRes( MENU_BROWSER_DEFAULTCONTEXT ) );
return OUString("explorer");
}
IController& SbaTableQueryBrowser::getCommandController()
......
......@@ -33,7 +33,6 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/propertyvalue.hxx>
#include <vcl/help.hxx>
#include <vcl/commandinfoprovider.hxx>
#include <dbaccess/IController.hxx>
#include <framework/actiontriggerhelper.hxx>
#include <toolkit/awt/vclxmenu.hxx>
......@@ -411,98 +410,6 @@ IMPL_LINK_NOARG( DBTreeListBox, ScrollDownHdl, LinkParamNone*, void )
namespace
{
void lcl_enableEntries( PopupMenu* _pPopup, IController& _rController )
{
if ( !_pPopup )
return;
sal_uInt16 nCount = _pPopup->GetItemCount();
for (sal_uInt16 i=0; i < nCount; ++i)
{
if ( _pPopup->GetItemType(i) != MenuItemType::SEPARATOR )
{
sal_uInt16 nId = _pPopup->GetItemId(i);
PopupMenu* pSubPopUp = _pPopup->GetPopupMenu(nId);
if ( pSubPopUp )
{
lcl_enableEntries( pSubPopUp, _rController );
_pPopup->EnableItem(nId,pSubPopUp->HasValidEntries());
}
else
{
OUString sCommandURL( _pPopup->GetItemCommand( nId ) );
bool bEnabled = sCommandURL.isEmpty()
? _rController.isCommandEnabled( nId )
: _rController.isCommandEnabled( sCommandURL );
_pPopup->EnableItem( nId, bEnabled );
}
}
}
_pPopup->RemoveDisabledEntries();
}
}
namespace
{
void lcl_adjustMenuItemIDs( Menu& _rMenu, IController& _rCommandController )
{
sal_uInt16 nCount = _rMenu.GetItemCount();
for ( sal_uInt16 pos = 0; pos < nCount; ++pos )
{
// do not adjust separators
if ( _rMenu.GetItemType( pos ) == MenuItemType::SEPARATOR )
continue;
sal_uInt16 nId = _rMenu.GetItemId(pos);
OUString aCommand = _rMenu.GetItemCommand( nId );
PopupMenu* pPopup = _rMenu.GetPopupMenu( nId );
if ( pPopup )
{
lcl_adjustMenuItemIDs( *pPopup, _rCommandController );
continue;
}
const sal_uInt16 nCommandId = _rCommandController.registerCommandURL( aCommand );
_rMenu.InsertItem( nCommandId, _rMenu.GetItemText( nId ), _rMenu.GetItemImage( nId ),
_rMenu.GetItemBits( nId ), OString(), pos );
// more things to preserve:
// - the help command
OUString sHelpURL = _rMenu.GetHelpCommand( nId );
if ( !sHelpURL.isEmpty() )
_rMenu.SetHelpCommand( nCommandId, sHelpURL );
// remove the "old" item
_rMenu.RemoveItem( pos+1 );
}
}
void lcl_insertMenuItemImages( Menu& _rMenu, IController& _rCommandController )
{
uno::Reference< frame::XController > xController = _rCommandController.getXController();
uno::Reference< frame::XFrame> xFrame;
if ( xController.is() )
xFrame = xController->getFrame();
sal_uInt16 nCount = _rMenu.GetItemCount();
for ( sal_uInt16 pos = 0; pos < nCount; ++pos )
{
// do not adjust separators
if ( _rMenu.GetItemType( pos ) == MenuItemType::SEPARATOR )
continue;
sal_uInt16 nId = _rMenu.GetItemId(pos);
OUString aCommand = _rMenu.GetItemCommand( nId );
PopupMenu* pPopup = _rMenu.GetPopupMenu( nId );
if ( pPopup )
{
lcl_insertMenuItemImages( *pPopup, _rCommandController );
continue;
}
if ( xFrame.is() )
_rMenu.SetItemImage(nId, vcl::CommandInfoProvider::Instance().GetImageForCommand(aCommand, xFrame));
}
}
// SelectionSupplier
typedef ::cppu::WeakImplHelper< XSelectionSupplier
> SelectionSupplier_Base;
......@@ -554,25 +461,13 @@ namespace
VclPtr<PopupMenu> DBTreeListBox::CreateContextMenu()
{
VclPtr< PopupMenu > pContextMenu;
if ( !m_pContextMenuProvider )
return pContextMenu;
return nullptr;
OUString aResourceName( m_pContextMenuProvider->getContextMenuResourceName( *this ) );
OUString aMenuIdentifier;
if ( aResourceName.isEmpty() )
{
// the basic context menu
pContextMenu.reset( m_pContextMenuProvider->getContextMenu( *this ) );
// disable what is not available currently
lcl_enableEntries( pContextMenu.get(), m_pContextMenuProvider->getCommandController() );
// set images
lcl_insertMenuItemImages( *pContextMenu, m_pContextMenuProvider->getCommandController() );
}
else
{
return nullptr;
css::uno::Sequence< css::uno::Any > aArgs( 3 );
aArgs[0] <<= comphelper::makePropertyValue( "Value", aResourceName );
aArgs[1] <<= comphelper::makePropertyValue( "Frame", m_pContextMenuProvider->getCommandController().getXController()->getFrame() );
......@@ -582,23 +477,21 @@ VclPtr<PopupMenu> DBTreeListBox::CreateContextMenu()
m_xMenuController.set( xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
"com.sun.star.comp.framework.ResourceMenuController", aArgs, xContext ), css::uno::UNO_QUERY );
css::uno::Reference< css::awt::XPopupMenu > xPopupMenu( xContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.awt.PopupMenu", xContext ), css::uno::UNO_QUERY );
if ( !m_xMenuController.is() || !xPopupMenu.is() )
return pContextMenu;
if ( !m_xMenuController.is() )
return nullptr;
m_xMenuController->setPopupMenu( xPopupMenu );
pContextMenu.reset( static_cast< PopupMenu* >( VCLXMenu::GetImplementation( xPopupMenu )->GetMenu() ) );
rtl::Reference<VCLXPopupMenu> xPopupMenu( new VCLXPopupMenu );
m_xMenuController->setPopupMenu( xPopupMenu.get() );
VclPtr<PopupMenu> pContextMenu( static_cast< PopupMenu* >( xPopupMenu->GetMenu() ) );
pContextMenu->AddEventListener( LINK( this, DBTreeListBox, MenuEventListener ) );
aMenuIdentifier = "private:resource/popupmenu/" + aResourceName;
}
// allow context menu interception
::comphelper::OInterfaceContainerHelper2* pInterceptors = m_pContextMenuProvider->getContextMenuInterceptors();
if ( !pInterceptors || !pInterceptors->getLength() )
return pContextMenu;
OUString aMenuIdentifier( "private:resource/popupmenu/" + aResourceName );
ContextMenuExecuteEvent aEvent;
aEvent.SourceWindow = VCLUnoHelper::GetInterface( this );
aEvent.ExecutePosition.X = -1;
......@@ -654,20 +547,13 @@ VclPtr<PopupMenu> DBTreeListBox::CreateContextMenu()
::framework::ActionTriggerHelper::CreateMenuFromActionTriggerContainer(
pContextMenu, aEvent.ActionTriggerContainer );
aEvent.ActionTriggerContainer.clear();
// the interceptors only know command URLs, but our menus primarily work
// with IDs -> we need to translate the commands to IDs
if ( aResourceName.isEmpty() )
lcl_adjustMenuItemIDs( *pContextMenu, m_pContextMenuProvider->getCommandController() );
}
return pContextMenu;
}
void DBTreeListBox::ExecuteContextMenuAction( sal_uInt16 _nSelectedPopupEntry )
void DBTreeListBox::ExecuteContextMenuAction( sal_uInt16 )
{
if ( !m_xMenuController.is() && m_pContextMenuProvider && _nSelectedPopupEntry )
m_pContextMenuProvider->getCommandController().executeChecked( _nSelectedPopupEntry, Sequence< PropertyValue >() );
}
IMPL_LINK( DBTreeListBox, MenuEventListener, VclMenuEvent&, rMenuEvent, void )
......
......@@ -71,20 +71,9 @@ namespace dbaui
/** returns the context menu resource name for the control
Supposed to be a valid name from uiconfig/<module>/popupmenu folder.
Nevertheless, the getContextMenu method will not be evaluated, as long
as this method returns non-empty string.
*/
virtual OUString getContextMenuResourceName( Control& _rControl ) const = 0;
/** returns the context menu for the control
Note that the menu does not need to care for the controls selection, or its
state in general.
The control itself will, using the controller provided by getCommandController,
disable menu entries as needed.
*/
virtual VclPtr<PopupMenu> getContextMenu( Control& _rControl ) const = 0;
/** returns the controller which is responsible for providing states of certain features,
and executing them.
*/
......
......@@ -129,7 +129,6 @@
#define RID_QUERYFUNCTION_POPUPMENU RID_MENU_START + 6
#define RID_TABLEDESIGNROWPOPUPMENU RID_MENU_START + 7
#define RID_SBA_RTF_PKEYPOPUP RID_MENU_START + 9
#define MENU_BROWSER_DEFAULTCONTEXT RID_MENU_START + 14
#define RID_MENU_JOINVIEW_CONNECTION RID_MENU_START + 16
#define RID_MENU_JOINVIEW_TABLE RID_MENU_START + 17
......
......@@ -233,7 +233,6 @@ namespace dbaui
// IContextMenuProvider
virtual OUString getContextMenuResourceName( Control& _rControl ) const override;
virtual VclPtr<PopupMenu> getContextMenu( Control& _rControl ) const override;
virtual IController& getCommandController() override;
virtual ::comphelper::OInterfaceContainerHelper2*
getContextMenuInterceptors() override;
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
* 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/.
*
-->
<menu:menupopup xmlns:menu="http://openoffice.org/2001/menu">
<menu:menuitem menu:id=".uno:DSBEditDB"/>
<menu:menuitem menu:id=".uno:DSBCloseConnection"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:Copy"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:DSBAdministrate"/>
</menu:menupopup>
......@@ -3,6 +3,11 @@
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:install="http://openoffice.org/2004/installation" oor:name="DbBrowserWindowState" oor:package="org.openoffice.Office.UI">
<node oor:name="UIElements">
<node oor:name="States">
<node oor:name="private:resource/popupmenu/explorer" oor:op="replace">
<prop oor:name="UIName" oor:type="xs:string">
<value xml:lang="en-US">Explorer</value>
</prop>
</node>
<node oor:name="private:resource/toolbar/toolbar" oor:op="replace">
<prop oor:name="DockPos" oor:type="xs:string">
<value>0,1</value>
......
......@@ -536,6 +536,21 @@
<value>1</value>
</prop>
</node>
<node oor:name=".uno:DSBEditDB" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Edit ~Database File...</value>
</prop>
</node>
<node oor:name=".uno:DSBCloseConnection" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Disco~nnect</value>
</prop>
</node>
<node oor:name=".uno:DSBAdministrate" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Registered databases ...</value>
</prop>
</node>
</node>
<node oor:name="Popups">
<node oor:name=".uno:DBDatabasePropertiesMenu" oor:op="replace">
......
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