提交 7f80f42e 编写于 作者: S serge-rider

dbeaver/dbeaver-ee#587 ERD editor context menu improvements. Object create handlers refactoring.

上级 cd93dd0b
......@@ -38,12 +38,6 @@
namespace="org.jkiss.dbeaver.core.global"
properties="standalone,hasActiveProject,hasMultipleProjects"
type="java.lang.Object"/>
<propertyTester
class="org.jkiss.dbeaver.ui.actions.ObjectPropertyTester"
id="org.jkiss.dbeaver.ui.actions.ObjectPropertyTester"
namespace="org.jkiss.dbeaver.core.object"
properties="canOpen,canCreate,canPaste,canDelete,canRename,canMoveUp,canMoveDown,canFilter,canFilterObject,hasFilter"
type="org.jkiss.dbeaver.model.navigator.DBNNode"/>
<propertyTester
class="org.jkiss.dbeaver.ui.actions.DataSourcePropertyTester"
id="org.jkiss.dbeaver.ui.actions.DataSourcePropertyTester"
......
......@@ -19,11 +19,8 @@
*/
package org.jkiss.dbeaver.erd.ui.editor;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchActionConstants;
......@@ -34,7 +31,7 @@ import org.jkiss.dbeaver.ui.navigator.NavigatorCommands;
/**
* Provides a context menu for the schema diagram editor. A virtual cut and paste from the flow example
*/
public class ERDEditorContextMenuProvider extends ContextMenuProvider {
public class ERDEditorContextMenuProvider extends MenuManager implements IMenuListener {
private ERDEditorPart editor;
/**
......@@ -44,16 +41,24 @@ public class ERDEditorContextMenuProvider extends ContextMenuProvider {
* @param editor the editor
*/
ERDEditorContextMenuProvider(ERDEditorPart editor) {
super(editor.getViewer());
super("ERD Editor Context Menu", "#ERDEditorContext");
this.editor = editor;
this.addMenuListener(this);
this.setRemoveAllWhenShown(true);
editor.getEditorSite().registerContextMenu(
"#ERDEditorContext", this, editor.getEditorSite().getSelectionProvider(), false);
}
/**
* @see ContextMenuProvider#buildContextMenu(org.eclipse.jface.action.IMenuManager)
*/
@Override
public void buildContextMenu(IMenuManager menu) {
public void menuAboutToShow(IMenuManager menu) {
this.buildContextMenu(menu);
}
private void buildContextMenu(IMenuManager menu) {
if (editor.isLoaded()) {
menu.add(new Separator(IWorkbenchActionConstants.M_EDIT));
ISelection selection = editor.getGraphicalViewer().getSelection();
if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
editor.fillPartContextMenu(menu, (IStructuredSelection) selection);
......@@ -69,18 +74,15 @@ public class ERDEditorContextMenuProvider extends ContextMenuProvider {
menu.add(new Separator(GEFActionConstants.GROUP_COPY));
//menu.add(ActionUtils.makeCommandContribution(editor.getSite(), IWorkbenchCommandConstants.EDIT_COPY));
menu.add(new Separator(GEFActionConstants.GROUP_PRINT));
menu.add(new Separator(GEFActionConstants.GROUP_EDIT));
menu.add(new Separator(GEFActionConstants.GROUP_VIEW));
menu.add(new Separator(GEFActionConstants.GROUP_FIND));
menu.add(new Separator(GEFActionConstants.GROUP_REST));
menu.add(new Separator(GEFActionConstants.GROUP_SAVE));
menu.add(new Separator());
menu.add(new GroupMarker(NavigatorCommands.GROUP_TOOLS));
menu.add(new GroupMarker(NavigatorCommands.GROUP_NAVIGATOR_ADDITIONS));
menu.add(new GroupMarker(NavigatorCommands.GROUP_NAVIGATOR_ADDITIONS_END));
// menu.add(new GroupMarker(NavigatorCommands.GROUP_NAVIGATOR_ADDITIONS));
// menu.add(new GroupMarker(NavigatorCommands.GROUP_NAVIGATOR_ADDITIONS_END));
menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
menu.add(new GroupMarker(IActionConstants.MB_ADDITIONS_END));
......
......@@ -409,7 +409,7 @@ public abstract class ERDEditorPart extends GraphicalEditorWithFlyoutPalette
viewer.setContents(new EntityDiagram(null, "empty", getContentProvider(), getDecorator()));
// Set context menu
ContextMenuProvider provider = new ERDEditorContextMenuProvider(this);
ERDEditorContextMenuProvider provider = new ERDEditorContextMenuProvider(this);
viewer.setContextMenu(provider);
IWorkbenchPartSite site = getSite();
if (site instanceof IEditorSite) {
......
......@@ -117,7 +117,7 @@
id="org.jkiss.dbeaver.ui.actions.ObjectPropertyTester"
namespace="org.jkiss.dbeaver.core.object"
properties="canOpen,canCreateSingle,canCreateMulti,canPaste,canDelete,canRename,canMoveUp,canMoveDown,canFilter,canFilterObject,hasFilter,supportsIndexCreate,supportsConstraintCreate"
type="org.jkiss.dbeaver.model.navigator.DBNNode"/>
type="org.jkiss.dbeaver.model.DBPNamedObject"/>
<propertyTester
class="org.jkiss.dbeaver.ui.navigator.ResourcePropertyTester"
......
......@@ -32,6 +32,7 @@ import org.jkiss.dbeaver.registry.ObjectManagerRegistry;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.ActionUtils;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerObjectCreateNew;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import java.util.List;
......@@ -66,14 +67,14 @@ public class ObjectPropertyTester extends PropertyTester
@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (!(receiver instanceof DBNNode)) {
DBNNode node = RuntimeUtils.getObjectAdapter(receiver, DBNNode.class);
if (node == null) {
return false;
}
Display display = Display.getCurrent();
if (display == null) {
return false;
}
DBNNode node = (DBNNode)receiver;
//System.out.println("TEST " + property + " ON " + node.getName());
switch (property) {
......
......@@ -31,7 +31,6 @@ import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.Collections;
......@@ -40,7 +39,7 @@ public abstract class NavigatorHandlerCreateColumnObjectBase extends NavigatorHa
private static final Log log = Log.getLog(NavigatorHandlerCreateColumnObjectBase.class);
static Object createColumnObject(@NotNull ExecutionEvent event, @NotNull Class<?> columnObjectSuperType) {
DBNNode node = NavigatorUtils.getSelectedNode(HandlerUtil.getCurrentSelection(event));
DBNNode node = NavigatorHandlerObjectCreateNew.getNodeFromSelection(HandlerUtil.getCurrentSelection(event));
if (!(node instanceof DBNDatabaseItem)) {
log.error("Selected node is not a database item");
return null;
......
......@@ -25,6 +25,8 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.*;
import org.eclipse.ui.actions.CompoundContributionItem;
......@@ -54,6 +56,7 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.internal.UINavigatorMessages;
import org.jkiss.dbeaver.ui.navigator.NavigatorCommands;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
......@@ -78,7 +81,12 @@ public class NavigatorHandlerObjectCreateNew extends NavigatorHandlerObjectCreat
boolean isFolder = CommonUtils.toBoolean(event.getParameter(NavigatorCommands.PARAM_OBJECT_TYPE_FOLDER));
final ISelection selection = HandlerUtil.getCurrentSelection(event);
DBNNode node = NavigatorUtils.getSelectedNode(selection);
if (selection.isEmpty()) {
return null;
}
DBNNode node = getNodeFromSelection(selection);
if (node != null) {
Class<?> newObjectType = null;
if (objectType != null) {
......@@ -112,6 +120,16 @@ public class NavigatorHandlerObjectCreateNew extends NavigatorHandlerObjectCreat
return null;
}
@Nullable
static DBNNode getNodeFromSelection(ISelection selection) {
DBNNode node = null;
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
Object selectedObject = ((IStructuredSelection)selection).getFirstElement();
node = RuntimeUtils.getObjectAdapter(selectedObject, DBNNode.class);
}
return node;
}
@Override
public void updateElement(UIElement element, Map parameters)
{
......@@ -127,7 +145,11 @@ public class NavigatorHandlerObjectCreateNew extends NavigatorHandlerObjectCreat
Object objectIcon = parameters.get(NavigatorCommands.PARAM_OBJECT_TYPE_ICON);
if (typeName == null) {
// Try to get type from active selection
DBNNode node = NavigatorUtils.getSelectedNode(element);
ISelectionProvider selectionProvider = UIUtils.getSelectionProvider(element.getServiceLocator());
if (selectionProvider == null) {
return;
}
DBNNode node = getNodeFromSelection(selectionProvider.getSelection());
if (node != null && !node.isDisposed()) {
List<IContributionItem> actions = fillCreateMenuItems(workbenchWindow.getActivePage().getActivePart().getSite(), node);
for (IContributionItem item : actions) {
......@@ -418,7 +440,7 @@ public class NavigatorHandlerObjectCreateNew extends NavigatorHandlerObjectCreat
return EMPTY_MENU;
}
IWorkbenchPartSite site = activePart.getSite();
DBNNode node = NavigatorUtils.getSelectedNode(site.getSelectionProvider());
DBNNode node = getNodeFromSelection(site.getSelectionProvider().getSelection());
List<IContributionItem> createActions = fillCreateMenuItems(site, node);
return createActions.toArray(new IContributionItem[0]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册