提交 ebf31ec3 编写于 作者: S Serge Rider

Object create menu/model fixes


Former-commit-id: cf992d1d
上级 074ca1f9
......@@ -21,20 +21,17 @@ import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.jkiss.dbeaver.model.gis.GisConstants;
import org.jkiss.dbeaver.ui.MenuCreator;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.gis.GeometryDataUtils;
import org.jkiss.dbeaver.ui.gis.IGeometryValueEditor;
import java.util.List;
class SelectCRSAction extends Action implements IMenuCreator {
class SelectCRSAction extends Action {
private MenuManager menuManager;
private IGeometryValueEditor valueEditor;
public SelectCRSAction(IGeometryValueEditor valueEditor) {
......@@ -55,21 +52,8 @@ class SelectCRSAction extends Action implements IMenuCreator {
@Override
public IMenuCreator getMenuCreator() {
return this;
}
@Override
public void dispose() {
if (menuManager != null) {
menuManager.dispose();
menuManager = null;
}
}
@Override
public Menu getMenu(Control parent) {
if (menuManager == null) {
menuManager = new MenuManager();
return new MenuCreator(control -> {
MenuManager menuManager = new MenuManager();
menuManager.setRemoveAllWhenShown(true);
menuManager.addMenuListener(manager -> {
menuManager.add(new SetCRSAction(valueEditor, GisConstants.DEFAULT_SRID));
......@@ -95,12 +79,8 @@ class SelectCRSAction extends Action implements IMenuCreator {
}
});
});
}
return menuManager.createContextMenu(parent);
return menuManager;
});
}
@Override
public Menu getMenu(Menu parent) {
return null;
}
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.model.runtime;
/**
* Abstract object creator
*/
public interface DBRCreator<RESULT, PARAMETER> {
RESULT createObject(PARAMETER parameter);
}
\ No newline at end of file
......@@ -3753,7 +3753,7 @@ public class ResultSetViewer extends Viewer
}
}
private class OpenWithAction extends Action implements IMenuCreator {
private class OpenWithAction extends Action {
OpenWithAction()
{
super(null, IAction.AS_DROP_DOWN_MENU);
......@@ -3764,7 +3764,11 @@ public class ResultSetViewer extends Viewer
@Override
public IMenuCreator getMenuCreator()
{
return this;
return new MenuCreator(control -> {
MenuManager menuManager = new MenuManager();
fillOpenWithMenu(menuManager);
return menuManager;
});
}
@Override
......@@ -3772,30 +3776,9 @@ public class ResultSetViewer extends Viewer
{
}
@Override
public void dispose()
{
}
@Override
public Menu getMenu(Control parent)
{
MenuManager menuManager = new MenuManager();
fillOpenWithMenu(menuManager);
return menuManager.createContextMenu(parent);
}
@Nullable
@Override
public Menu getMenu(Menu parent)
{
return null;
}
}
private class ConfigAction extends Action implements IMenuCreator {
private class ConfigAction extends Action {
ConfigAction()
{
super(ResultSetMessages.controls_resultset_viewer_action_options, IAction.AS_DROP_DOWN_MENU);
......@@ -3805,88 +3788,71 @@ public class ResultSetViewer extends Viewer
@Override
public IMenuCreator getMenuCreator()
{
return this;
}
@Override
public void runWithEvent(Event event)
{
new VirtualEntityEditAction().run();
}
@Override
public void dispose()
{
}
@Override
public Menu getMenu(Control parent)
{
MenuManager menuManager = new MenuManager();
menuManager.add(new ShowFiltersAction(false));
//menuManager.add(new CustomizeColorsAction());
menuManager.add(new Separator());
VirtualUniqueKeyEditAction vkAction = new VirtualUniqueKeyEditAction(true);
if (vkAction.isEnabled()) {
menuManager.add(vkAction);
}
VirtualUniqueKeyEditAction vkRemoveAction = new VirtualUniqueKeyEditAction(false);
if (vkRemoveAction.isEnabled()) {
menuManager.add(vkRemoveAction);
}
menuManager.add(new DictionaryEditAction());
if (getDataContainer() != null) {
menuManager.add(new VirtualEntityEditAction());
}
menuManager.add(new Separator());
if (activePresentationDescriptor != null && activePresentationDescriptor.supportsRecordMode()) {
menuManager.add(new ToggleModeAction());
}
activePresentation.fillMenu(menuManager);
if (!CommonUtils.isEmpty(availablePresentations) && availablePresentations.size() > 1) {
menuManager.add(new Separator());
for (final ResultSetPresentationDescriptor pd : availablePresentations) {
Action action = new Action(pd.getLabel(), IAction.AS_RADIO_BUTTON) {
@Override
public boolean isEnabled() {
return !isRefreshInProgress();
}
@Override
public boolean isChecked() {
return pd == activePresentationDescriptor;
}
return new MenuCreator(control -> {
MenuManager configMenuManager = new MenuManager();
configMenuManager.add(new ShowFiltersAction(false));
//menuManager.add(new CustomizeColorsAction());
configMenuManager.add(new Separator());
VirtualUniqueKeyEditAction vkAction = new VirtualUniqueKeyEditAction(true);
if (vkAction.isEnabled()) {
configMenuManager.add(vkAction);
}
VirtualUniqueKeyEditAction vkRemoveAction = new VirtualUniqueKeyEditAction(false);
if (vkRemoveAction.isEnabled()) {
configMenuManager.add(vkRemoveAction);
}
configMenuManager.add(new DictionaryEditAction());
if (getDataContainer() != null) {
configMenuManager.add(new VirtualEntityEditAction());
}
configMenuManager.add(new Separator());
if (activePresentationDescriptor != null && activePresentationDescriptor.supportsRecordMode()) {
configMenuManager.add(new ToggleModeAction());
}
activePresentation.fillMenu(configMenuManager);
if (!CommonUtils.isEmpty(availablePresentations) && availablePresentations.size() > 1) {
configMenuManager.add(new Separator());
for (final ResultSetPresentationDescriptor pd : availablePresentations) {
Action action = new Action(pd.getLabel(), IAction.AS_RADIO_BUTTON) {
@Override
public boolean isEnabled() {
return !isRefreshInProgress();
}
@Override
public boolean isChecked() {
return pd == activePresentationDescriptor;
}
@Override
public void run() {
switchPresentation(pd);
@Override
public void run() {
switchPresentation(pd);
}
};
if (pd.getIcon() != null) {
//action.setImageDescriptor(ImageDescriptor.createFromImage(pd.getIcon()));
}
};
if (pd.getIcon() != null) {
//action.setImageDescriptor(ImageDescriptor.createFromImage(pd.getIcon()));
configMenuManager.add(action);
}
menuManager.add(action);
}
}
menuManager.add(new Separator());
menuManager.add(new Action("Preferences") {
@Override
public void run()
{
UIUtils.showPreferencesFor(
getControl().getShell(),
ResultSetViewer.this,
PrefPageResultSetMain.PAGE_ID);
}
configMenuManager.add(new Separator());
configMenuManager.add(new Action("Preferences") {
@Override
public void run()
{
UIUtils.showPreferencesFor(
getControl().getShell(),
ResultSetViewer.this,
PrefPageResultSetMain.PAGE_ID);
}
});
return configMenuManager;
});
return menuManager.createContextMenu(parent);
}
@Nullable
@Override
public Menu getMenu(Menu parent)
public void runWithEvent(Event event)
{
return null;
new VirtualEntityEditAction().run();
}
}
......
......@@ -23,18 +23,16 @@ import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.ISharedImages;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.data.DBDAttributeBinding;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.MenuCreator;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.resultset.*;
import org.jkiss.dbeaver.ui.controls.resultset.IResultSetPanel;
import org.jkiss.dbeaver.ui.controls.resultset.internal.ResultSetMessages;
import org.jkiss.utils.CommonUtils;
......@@ -228,9 +226,7 @@ public class GroupingPanel implements IResultSetPanel {
}
}
class DefaultSortingAction extends Action implements IMenuCreator {
private MenuManager menuManager;
class DefaultSortingAction extends Action {
DefaultSortingAction() {
super(ResultSetMessages.controls_resultset_grouping_default_sorting, Action.AS_DROP_DOWN_MENU);
......@@ -239,32 +235,13 @@ public class GroupingPanel implements IResultSetPanel {
@Override
public IMenuCreator getMenuCreator() {
return this;
}
@Override
public void dispose() {
if (menuManager != null) {
menuManager.dispose();
menuManager = null;
}
}
@Override
public Menu getMenu(Control parent)
{
if (menuManager == null) {
menuManager = new MenuManager();
return new MenuCreator(control -> {
MenuManager menuManager = new MenuManager();
menuManager.add(new ChangeSortingAction(null));
menuManager.add(new ChangeSortingAction(Boolean.FALSE));
menuManager.add(new ChangeSortingAction(Boolean.TRUE));
}
return menuManager.createContextMenu(parent);
}
@Override
public Menu getMenu(Menu parent) {
return null;
return menuManager;
});
}
}
......
......@@ -207,7 +207,7 @@ public class ObjectPropertyTester extends PropertyTester
return false;
}
private boolean canCreateObject(DBNNode node, Boolean onlySingle) {
public static boolean canCreateObject(DBNNode node, Boolean onlySingle) {
if (onlySingle == null) {
// Just try to find first create handler
if (node instanceof DBNDataSource) {
......@@ -255,7 +255,7 @@ public class ObjectPropertyTester extends PropertyTester
}
}
private boolean isReadOnly(DBSObject object)
public static boolean isReadOnly(DBSObject object)
{
if (object == null) {
return true;
......
......@@ -16,15 +16,14 @@
*/
package org.jkiss.dbeaver.ui.controls.itemlist;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.ui.part.MultiPageEditorSite;
......@@ -40,11 +39,13 @@ import org.jkiss.dbeaver.model.struct.DBSWrapper;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.properties.ObjectPropertyDescriptor;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.actions.ObjectPropertyTester;
import org.jkiss.dbeaver.ui.editors.DatabaseEditorUtils;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditor;
import org.jkiss.dbeaver.ui.internal.UINavigatorMessages;
import org.jkiss.dbeaver.ui.navigator.NavigatorCommands;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerFilterConfig;
import org.jkiss.dbeaver.ui.editors.DatabaseEditorUtils;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditor;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerObjectCreateNew;
import org.jkiss.utils.ArrayUtils;
import java.lang.reflect.InvocationTargetException;
......@@ -109,9 +110,35 @@ public class ItemListControl extends NodeListControl
contributionManager.add(ActionUtils.makeCommandContribution(
workbenchSite,
NavigatorCommands.CMD_OBJECT_OPEN));
contributionManager.add(ActionUtils.makeCommandContribution(
workbenchSite,
NavigatorCommands.CMD_OBJECT_CREATE));
{
if (ObjectPropertyTester.canCreateObject(rootNode, true)) {
contributionManager.add(ActionUtils.makeCommandContribution(
workbenchSite,
NavigatorCommands.CMD_OBJECT_CREATE));
} else if (ObjectPropertyTester.canCreateObject(rootNode, false)) {
contributionManager.add(new Action(null, Action.AS_DROP_DOWN_MENU) {
{
setActionDefinitionId(NavigatorCommands.CMD_OBJECT_CREATE);
}
@Override
public void run() {
super.run();
}
@Override
public IMenuCreator getMenuCreator() {
return new MenuCreator(control -> {
List<IContributionItem> items = NavigatorHandlerObjectCreateNew.fillCreateMenuItems((IWorkbenchPartSite) workbenchSite, rootNode);
MenuManager menuManager = new MenuManager();
for (IContributionItem cc : items) {
menuManager.add(cc);
}
return menuManager;
});
}
});
}
}
contributionManager.add(ActionUtils.makeCommandContribution(
workbenchSite,
NavigatorCommands.CMD_OBJECT_DELETE));
......
package org.jkiss.dbeaver.ui;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.jkiss.dbeaver.model.runtime.DBRCreator;
public class MenuCreator implements IMenuCreator {
private DBRCreator<MenuManager, Control> creator;
private MenuManager menuManager;
public MenuCreator(DBRCreator<MenuManager, Control> creator) {
this.creator = creator;
}
@Override
public Menu getMenu(Control parent) {
if (menuManager != null) {
menuManager.dispose();
}
menuManager = creator.createObject(parent);
return menuManager.createContextMenu(parent);
}
@Override
public Menu getMenu(Menu parent) {
return null;
}
@Override
public void dispose() {
if (menuManager != null) {
menuManager.dispose();
}
menuManager = null;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册