提交 5a13318c 编写于 作者: S Serge Rider

#6344 Default table editor page configuration

上级 c034f362
......@@ -57,6 +57,10 @@ public abstract class AbstractContextDescriptor extends AbstractDescriptor
return !objectTypes.isEmpty();
}
public List<ObjectType> getObjectTypes() {
return objectTypes;
}
public boolean appliesTo(DBPObject object)
{
return appliesTo(object, null);
......
......@@ -32,6 +32,9 @@ import org.jkiss.dbeaver.ui.css.DBStyles;
*/
public abstract class MultiPageDatabaseEditor extends MultiPageAbstractEditor implements IDatabaseEditor, DBPContextProvider
{
public static final String PARAMETER_ACTIVE_PAGE = "activePage";
public static final String PARAMETER_ACTIVE_FOLDER = "activeFolder";
private DatabaseEditorListener listener;
@Override
......
......@@ -36,6 +36,7 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.lightgrid.*;
import org.jkiss.dbeaver.ui.controls.resultset.AbstractPresentation;
import org.jkiss.dbeaver.ui.controls.resultset.ResultSetPreferences;
import org.jkiss.utils.CommonUtils;
/**
* ResultSetControl
......@@ -280,8 +281,9 @@ public class Spreadsheet extends LightGrid implements Listener {
GridPos pos = super.getCell(new Point(event.x, event.y));
GridPos focusPos = super.getFocusPos();
if (pos != null && focusPos != null && pos.equals(super.getFocusPos())) {
DoubleClickBehavior doubleClickBehavior = DoubleClickBehavior.valueOf(
presentation.getPreferenceStore().getString(ResultSetPreferences.RESULT_SET_DOUBLE_CLICK));
DoubleClickBehavior doubleClickBehavior = CommonUtils.valueOf(DoubleClickBehavior.class,
presentation.getPreferenceStore().getString(ResultSetPreferences.RESULT_SET_DOUBLE_CLICK),
DoubleClickBehavior.NONE);
switch (doubleClickBehavior) {
case NONE:
......
......@@ -174,7 +174,11 @@ public class PrefPageResultSetPresentation extends TargetPrefPage
gridShowAttrFilters.setSelection(store.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_ATTR_FILTERS));
gridShowAttrOrder.setSelection(store.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_ATTR_ORDERING));
gridDoubleClickBehavior.select(
Spreadsheet.DoubleClickBehavior.valueOf(store.getString(ResultSetPreferences.RESULT_SET_DOUBLE_CLICK)).ordinal());
CommonUtils.valueOf(
Spreadsheet.DoubleClickBehavior.class,
store.getString(ResultSetPreferences.RESULT_SET_DOUBLE_CLICK),
Spreadsheet.DoubleClickBehavior.NONE)
.ordinal());
autoSwitchMode.setSelection(store.getBoolean(ResultSetPreferences.RESULT_SET_AUTO_SWITCH_MODE));
showDescription.setSelection(store.getBoolean(ResultSetPreferences.RESULT_SET_SHOW_DESCRIPTION));
columnWidthByValue.setSelection(store.getBoolean(ResultSetPreferences.RESULT_SET_CALC_COLUMN_WIDTH_BY_VALUES));
......@@ -206,7 +210,8 @@ public class PrefPageResultSetPresentation extends TargetPrefPage
store.setValue(ResultSetPreferences.RESULT_SET_SHOW_ATTR_ICONS, gridShowAttrIcons.getSelection());
store.setValue(ResultSetPreferences.RESULT_SET_SHOW_ATTR_FILTERS, gridShowAttrFilters.getSelection());
store.setValue(ResultSetPreferences.RESULT_SET_SHOW_ATTR_ORDERING, gridShowAttrOrder.getSelection());
store.setValue(ResultSetPreferences.RESULT_SET_DOUBLE_CLICK, CommonUtils.fromOrdinal(Spreadsheet.DoubleClickBehavior.class, gridDoubleClickBehavior.getSelectionIndex()).name());
store.setValue(ResultSetPreferences.RESULT_SET_DOUBLE_CLICK, CommonUtils.fromOrdinal(
Spreadsheet.DoubleClickBehavior.class, gridDoubleClickBehavior.getSelectionIndex()).name());
store.setValue(ResultSetPreferences.RESULT_SET_AUTO_SWITCH_MODE, autoSwitchMode.getSelection());
store.setValue(ResultSetPreferences.RESULT_SET_SHOW_DESCRIPTION, showDescription.getSelection());
store.setValue(ResultSetPreferences.RESULT_SET_CALC_COLUMN_WIDTH_BY_VALUES, columnWidthByValue.getSelection());
......
......@@ -213,7 +213,10 @@
<extension point="org.eclipse.ui.commands">
<category id="org.jkiss.dbeaver.core.navigator" name="%category.dbnavigator.name" description="%category.dbnavigator.description"/>
<command id="org.jkiss.dbeaver.core.object.open" name="%command.org.jkiss.dbeaver.core.object.open.name" description="%command.org.jkiss.dbeaver.core.object.open.description" categoryId="org.jkiss.dbeaver.core.database"/>
<command id="org.jkiss.dbeaver.core.object.open" name="%command.org.jkiss.dbeaver.core.object.open.name" description="%command.org.jkiss.dbeaver.core.object.open.description" categoryId="org.jkiss.dbeaver.core.database">
<commandParameter id="activePage" name="Active page" optional="true"/>
<commandParameter id="activeFolder" name="Active folder" optional="true"/>
</command>
<command id="org.jkiss.dbeaver.core.object.create" name="%command.org.jkiss.dbeaver.core.object.create.name" description="%command.org.jkiss.dbeaver.core.object.create.description" categoryId="org.jkiss.dbeaver.core.database">
<commandParameter id="org.jkiss.dbeaver.core.object.type" name="Object type" optional="true"/>
<commandParameter id="org.jkiss.dbeaver.core.object.typeName" name="Object type name" optional="true"/>
......
......@@ -87,6 +87,10 @@ public class EntityEditorsRegistry {
return defaultEditor;
}
public List<EntityEditorDescriptor> getEntityEditors() {
return entityEditors;
}
public List<EntityEditorDescriptor> getEntityEditors(DBPObject object, IEntityEditorContext context, String position) {
List<EntityEditorDescriptor> editors = new ArrayList<>();
final List<EntityEditorDescriptor> positionList =
......
......@@ -105,6 +105,8 @@ public class UINavigatorMessages extends NLS {
public static String pref_page_database_general_label_double_click_connection_open_sqleditor;
public static String pref_page_database_general_label_double_click_connection_open_new_sqleditor;
public static String pref_page_database_general_label_double_click_connection_expand_collapse;
public static String pref_page_navigator_default_editor_page_label;
public static String pref_page_navigator_default_editor_page_tip;
// ProjectSettings
public static String pref_page_projects_settings_label_resource_location;
......
......@@ -81,6 +81,9 @@ pref_page_database_general_label_double_click_connection_conn_disconn = Connect
pref_page_database_general_label_double_click_connection_open_sqleditor = Open SQL Editor
pref_page_database_general_label_double_click_connection_open_new_sqleditor = Open new SQL Editor
pref_page_database_general_label_double_click_connection_expand_collapse = Expand / Collapse
pref_page_navigator_default_editor_page_label = Default editor page
pref_page_navigator_default_editor_page_tip = Activates specified page in object editors. If not specified then activates default page
#ProjectSettings
pref_page_projects_settings_label_resource_location = Resource locations
......
......@@ -17,11 +17,9 @@
package org.jkiss.dbeaver.ui.internal;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.navigator.NavigatorPreferences;
import org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase;
import org.jkiss.dbeaver.utils.PrefUtils;
/**
......@@ -46,8 +44,9 @@ public class UINavigatorPreferencesInitializer extends AbstractPreferenceInitial
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_GROUP_BY_DRIVER, false);
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_EDITOR_SHOW_TABLE_GRID, true);
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK, NavigatorViewBase.DoubleClickBehavior.EDIT.name());
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK, NavigatorViewBase.DoubleClickBehavior.EXPAND.name());
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK, NavigatorPreferences.DoubleClickBehavior.EDIT.name());
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK, NavigatorPreferences.DoubleClickBehavior.EXPAND.name());
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_DEFAULT_EDITOR_PAGE, "");
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_SHOW_SQL_PREVIEW, true);
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_SHOW_OBJECT_TIPS, true);
PrefUtils.setDefaultPreferenceValue(store, NavigatorPreferences.NAVIGATOR_LONG_LIST_FETCH_SIZE, 5000);
......
......@@ -31,6 +31,7 @@ public class NavigatorPreferences {
public static final String NAVIGATOR_EDITOR_SHOW_TABLE_GRID = "navigator.editor.showGrid"; //$NON-NLS-1$
public static final String NAVIGATOR_OBJECT_DOUBLE_CLICK = "navigator.object.doubleClick"; //$NON-NLS-1$
public static final String NAVIGATOR_CONNECTION_DOUBLE_CLICK = "navigator.connection.doubleClick"; //$NON-NLS-1$
public static final String NAVIGATOR_DEFAULT_EDITOR_PAGE = "navigator.object.defaultEditorPage"; //$NON-NLS-1$
public static final String NAVIGATOR_SHOW_SQL_PREVIEW = "navigator.editor.show.preview"; //$NON-NLS-1$
public static final String NAVIGATOR_SHOW_OBJECT_TIPS = "navigator.show.objects.tips"; //$NON-NLS-1$
public static final String NAVIGATOR_LONG_LIST_FETCH_SIZE = "navigator.long.list.fetch.size"; //$NON-NLS-1$
......@@ -48,4 +49,11 @@ public class NavigatorPreferences {
public static final int MIN_LONG_LIST_FETCH_SIZE = 100;
public enum DoubleClickBehavior {
EDIT,
CONNECT,
SQL_EDITOR,
EXPAND,
SQL_EDITOR_NEW
}
}
......@@ -49,6 +49,7 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.ViewerColumnController;
import org.jkiss.dbeaver.ui.dnd.DatabaseObjectTransfer;
import org.jkiss.dbeaver.ui.dnd.TreeNodeTransfer;
import org.jkiss.dbeaver.ui.editors.MultiPageDatabaseEditor;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.navigator.actions.NavigatorHandlerRefresh;
import org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorView;
......@@ -242,13 +243,17 @@ public class NavigatorUtils {
}
public static void executeNodeAction(DBXTreeNodeHandler.Action action, Object node, IServiceLocator serviceLocator) {
executeNodeAction(action, node, null, serviceLocator);
}
public static void executeNodeAction(DBXTreeNodeHandler.Action action, Object node, Map<String, Object> parameters, IServiceLocator serviceLocator) {
String defCommandId = null;
if (action == DBXTreeNodeHandler.Action.open) {
defCommandId = NavigatorCommands.CMD_OBJECT_OPEN;
}
String actionCommand = getNodeActionCommand(action, node, defCommandId);
if (actionCommand != null) {
ActionUtils.runCommand(actionCommand, new StructuredSelection(node), serviceLocator);
ActionUtils.runCommand(actionCommand, new StructuredSelection(node), parameters, serviceLocator);
} else {
// do nothing
// TODO: implement some other behavior
......@@ -551,15 +556,19 @@ public class NavigatorUtils {
}
public static void openNavigatorNode(Object node, IWorkbenchWindow window) {
}
public static void openNavigatorNode(Object node, IWorkbenchWindow window, Map<?, ?> parameters) {
if (node instanceof DBNResource) {
UIServiceSQL serviceSQL = DBWorkbench.getService(UIServiceSQL.class);
if (serviceSQL != null) {
serviceSQL.openResource(((DBNResource) node).getResource());
}
} else if (node instanceof DBNNode && ((DBNNode) node).allowsOpen()) {
Object activePage = parameters == null ? null : parameters.get(MultiPageDatabaseEditor.PARAMETER_ACTIVE_PAGE);
NavigatorHandlerObjectOpen.openEntityEditor(
(DBNNode) node,
null,
CommonUtils.toString(activePage, null),
window);
}
}
......
......@@ -105,7 +105,7 @@ public class NavigatorHandlerObjectOpen extends NavigatorHandlerObjectBase imple
}
}
if (node != null) {
NavigatorUtils.openNavigatorNode(node, HandlerUtil.getActiveWorkbenchWindow(event));
NavigatorUtils.openNavigatorNode(node, HandlerUtil.getActiveWorkbenchWindow(event), event.getParameters());
}
}
}
......
......@@ -33,11 +33,13 @@ import org.jkiss.dbeaver.model.IDataSourceContainerProvider;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.navigator.meta.DBXTreeNodeHandler;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceListener;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceConnections;
import org.jkiss.dbeaver.runtime.ui.UIServiceSQL;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.PropertyPageStandard;
import org.jkiss.dbeaver.ui.editors.MultiPageDatabaseEditor;
import org.jkiss.dbeaver.ui.navigator.INavigatorFilter;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.navigator.NavigatorPreferences;
......@@ -47,17 +49,11 @@ import org.jkiss.dbeaver.ui.navigator.database.load.TreeNodeSpecial;
import org.jkiss.utils.CommonUtils;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
public abstract class NavigatorViewBase extends ViewPart implements INavigatorModelView, IDataSourceContainerProvider, DBPPreferenceListener {
public enum DoubleClickBehavior {
EDIT,
CONNECT,
SQL_EDITOR,
EXPAND,
SQL_EDITOR_NEW,
}
private DBNModel model;
private DatabaseNavigatorTree tree;
private transient Object lastSelection;
......@@ -126,8 +122,11 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
if ((node instanceof DBNResource && ((DBNResource) node).getResource() instanceof IFolder)) {
toggleNode(viewer, node);
} else if (node instanceof DBNDataSource) {
DoubleClickBehavior dsBehaviorDefault = DoubleClickBehavior.valueOf(DBWorkbench.getPlatform().getPreferenceStore().getString(NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK));
if (dsBehaviorDefault == DoubleClickBehavior.EXPAND) {
NavigatorPreferences.DoubleClickBehavior dsBehaviorDefault = CommonUtils.valueOf(
NavigatorPreferences.DoubleClickBehavior.class,
DBWorkbench.getPlatform().getPreferenceStore().getString(NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK),
NavigatorPreferences.DoubleClickBehavior.EDIT);
if (dsBehaviorDefault == NavigatorPreferences.DoubleClickBehavior.EXPAND) {
toggleNode(viewer, node);
} else {
DBPDataSourceContainer dataSource = ((DBNDataSource) node).getObject();
......@@ -137,10 +136,12 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
break;
case CONNECT: {
UIServiceConnections serviceConnections = DBWorkbench.getService(UIServiceConnections.class);
if (dataSource.isConnected()) {
serviceConnections.disconnectDataSource(dataSource);
} else {
serviceConnections.connectDataSource(dataSource, null);
if (serviceConnections != null) {
if (dataSource.isConnected()) {
serviceConnections.disconnectDataSource(dataSource);
} else {
serviceConnections.connectDataSource(dataSource, null);
}
}
break;
}
......@@ -163,12 +164,23 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
} else if (node instanceof TreeNodeSpecial) {
((TreeNodeSpecial) node).handleDefaultAction(navigatorTree);
} else {
DoubleClickBehavior dcBehaviorDefault = DoubleClickBehavior.valueOf(DBWorkbench.getPlatform().getPreferenceStore().getString(NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK));
String defaultEditorPageId = null;
NavigatorPreferences.DoubleClickBehavior dcBehaviorDefault = CommonUtils.valueOf(
NavigatorPreferences.DoubleClickBehavior.class,
DBWorkbench.getPlatform().getPreferenceStore().getString(NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK));
if (node instanceof DBNDatabaseNode && ((DBNDatabaseNode) node).getObject() instanceof DBSDataContainer) {
defaultEditorPageId = DBWorkbench.getPlatform().getPreferenceStore().getString(NavigatorPreferences.NAVIGATOR_DEFAULT_EDITOR_PAGE);
}
boolean hasChildren = node instanceof DBNNode && ((DBNNode) node).hasChildren(true);
if (hasChildren && dcBehaviorDefault == DoubleClickBehavior.EXPAND) {
if (hasChildren && dcBehaviorDefault == NavigatorPreferences.DoubleClickBehavior.EXPAND) {
toggleNode(viewer, node);
} else {
NavigatorUtils.executeNodeAction(DBXTreeNodeHandler.Action.open, node, getSite());
Map<String, Object> parameters = null;
if (!CommonUtils.isEmpty(defaultEditorPageId)) {
parameters = Collections.singletonMap(MultiPageDatabaseEditor.PARAMETER_ACTIVE_PAGE, defaultEditorPageId);
}
NavigatorUtils.executeNodeAction(DBXTreeNodeHandler.Action.open, node, parameters, getSite());
}
}
}
......@@ -192,7 +204,7 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
}
}
protected void onSelectionChange(IStructuredSelection structSel) {
private void onSelectionChange(IStructuredSelection structSel) {
if (!structSel.isEmpty()) {
lastSelection = structSel.getFirstElement();
if (lastSelection instanceof DBNNode) {
......
......@@ -25,15 +25,23 @@ import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.ui.internal.UINavigatorMessages;
import org.jkiss.dbeaver.model.impl.AbstractDescriptor;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.model.struct.DBSEntity;
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditorDescriptor;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditorsRegistry;
import org.jkiss.dbeaver.ui.internal.UINavigatorMessages;
import org.jkiss.dbeaver.ui.navigator.NavigatorPreferences;
import org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
/**
......@@ -53,6 +61,7 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork
private Text longListFetchSizeText;
private Combo dsDoubleClickBehavior;
private Combo objDoubleClickBehavior;
private Combo defaultEditorPageCombo;
public PrefPageDatabaseNavigator()
{
......@@ -94,11 +103,13 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork
objDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_node_expand_collapse, 1);
dsDoubleClickBehavior = UIUtils.createLabelCombo(navigatorGroup, UINavigatorMessages.pref_page_database_general_label_double_click_connection, SWT.DROP_DOWN | SWT.READ_ONLY);
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_open_properties, NavigatorViewBase.DoubleClickBehavior.EDIT.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_conn_disconn, NavigatorViewBase.DoubleClickBehavior.CONNECT.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_open_sqleditor, NavigatorViewBase.DoubleClickBehavior.SQL_EDITOR.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_expand_collapse, NavigatorViewBase.DoubleClickBehavior.EXPAND.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_open_new_sqleditor, NavigatorViewBase.DoubleClickBehavior.SQL_EDITOR_NEW.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_open_properties, NavigatorPreferences.DoubleClickBehavior.EDIT.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_conn_disconn, NavigatorPreferences.DoubleClickBehavior.CONNECT.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_open_sqleditor, NavigatorPreferences.DoubleClickBehavior.SQL_EDITOR.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_expand_collapse, NavigatorPreferences.DoubleClickBehavior.EXPAND.ordinal());
dsDoubleClickBehavior.add(UINavigatorMessages.pref_page_database_general_label_double_click_connection_open_new_sqleditor, NavigatorPreferences.DoubleClickBehavior.SQL_EDITOR_NEW.ordinal());
defaultEditorPageCombo = UIUtils.createLabelCombo(navigatorGroup, UINavigatorMessages.pref_page_navigator_default_editor_page_label, UINavigatorMessages.pref_page_navigator_default_editor_page_tip, SWT.DROP_DOWN | SWT.READ_ONLY);
}
performDefaults();
......@@ -119,10 +130,24 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork
showResourceFolderPlaceholdersCheck.setSelection(store.getBoolean(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS));
groupByDriverCheck.setSelection(store.getBoolean(NavigatorPreferences.NAVIGATOR_GROUP_BY_DRIVER));
longListFetchSizeText.setText(store.getString(NavigatorPreferences.NAVIGATOR_LONG_LIST_FETCH_SIZE));
NavigatorViewBase.DoubleClickBehavior objDCB = NavigatorViewBase.DoubleClickBehavior.valueOf(store.getString(NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK));
objDoubleClickBehavior.select(objDCB == NavigatorViewBase.DoubleClickBehavior.EXPAND ? 1 : 0);
NavigatorPreferences.DoubleClickBehavior objDCB = CommonUtils.valueOf(NavigatorPreferences.DoubleClickBehavior.class, store.getString(NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK));
objDoubleClickBehavior.select(objDCB == NavigatorPreferences.DoubleClickBehavior.EXPAND ? 1 : 0);
dsDoubleClickBehavior.select(
NavigatorViewBase.DoubleClickBehavior.valueOf(store.getString(NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK)).ordinal());
CommonUtils.valueOf(
NavigatorPreferences.DoubleClickBehavior.class,
store.getString(NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK),
NavigatorPreferences.DoubleClickBehavior.EDIT)
.ordinal());
String defEditorPage = store.getString(NavigatorPreferences.NAVIGATOR_DEFAULT_EDITOR_PAGE);
List<EntityEditorDescriptor> entityEditors = getAvailableEditorPages();
defaultEditorPageCombo.add("");
for (EntityEditorDescriptor eed : entityEditors) {
defaultEditorPageCombo.add(eed.getName());
if (eed.getId().equals(defEditorPage)) {
defaultEditorPageCombo.select(defaultEditorPageCombo.getItemCount() - 1);
}
}
}
@Override
......@@ -138,19 +163,41 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork
store.setValue(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS, showResourceFolderPlaceholdersCheck.getSelection());
store.setValue(NavigatorPreferences.NAVIGATOR_GROUP_BY_DRIVER, groupByDriverCheck.getSelection());
store.setValue(NavigatorPreferences.NAVIGATOR_LONG_LIST_FETCH_SIZE, longListFetchSizeText.getText());
NavigatorViewBase.DoubleClickBehavior objDCB = NavigatorViewBase.DoubleClickBehavior.EXPAND;
NavigatorPreferences.DoubleClickBehavior objDCB = NavigatorPreferences.DoubleClickBehavior.EXPAND;
if (objDoubleClickBehavior.getSelectionIndex() == 0) {
objDCB = NavigatorViewBase.DoubleClickBehavior.EDIT;
objDCB = NavigatorPreferences.DoubleClickBehavior.EDIT;
}
store.setValue(NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK, objDCB.name());
store.setValue(NavigatorPreferences.NAVIGATOR_CONNECTION_DOUBLE_CLICK,
CommonUtils.fromOrdinal(NavigatorViewBase.DoubleClickBehavior.class, dsDoubleClickBehavior.getSelectionIndex()).name());
CommonUtils.fromOrdinal(NavigatorPreferences.DoubleClickBehavior.class, dsDoubleClickBehavior.getSelectionIndex()).name());
List<EntityEditorDescriptor> entityEditors = getAvailableEditorPages();
int defEditorIndex = defaultEditorPageCombo.getSelectionIndex();
store.setValue(NavigatorPreferences.NAVIGATOR_DEFAULT_EDITOR_PAGE, defEditorIndex == 0 ? "" : entityEditors.get(defEditorIndex - 1).getId());
PrefUtils.savePreferenceStore(store);
return true;
}
private List<EntityEditorDescriptor> getAvailableEditorPages() {
List<EntityEditorDescriptor> editors = new ArrayList<>(EntityEditorsRegistry.getInstance().getEntityEditors());
editors.removeIf(editor -> {
if (editor.getType() != EntityEditorDescriptor.Type.editor) return true;
for (AbstractDescriptor.ObjectType ot : editor.getObjectTypes()) {
if (!DBSDataContainer.class.getName().equals(ot.getImplName()) &&
!DBSObjectContainer.class.getName().equals(ot.getImplName()) &&
!DBSEntity.class.getName().equals(ot.getImplName()))
{
return true;
}
}
return false;
});
editors.sort(Comparator.comparing(EntityEditorDescriptor::getName));
return editors;
}
@Override
public void applyData(Object data)
{
......
......@@ -18,6 +18,8 @@
package org.jkiss.dbeaver.ui;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.IParameter;
import org.eclipse.core.commands.Parameterization;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.expressions.EvaluationContext;
......@@ -32,7 +34,6 @@ import org.eclipse.jface.commands.ToggleState;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.*;
import org.eclipse.ui.commands.ICommandImageService;
import org.eclipse.ui.commands.ICommandService;
......@@ -49,6 +50,8 @@ import org.jkiss.dbeaver.model.DBPImage;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.utils.CommonUtils;
import java.util.Map;
/**
* Action utils
*/
......@@ -271,6 +274,11 @@ public class ActionUtils
}
public static void runCommand(String commandId, ISelection selection, IServiceLocator serviceLocator)
{
runCommand(commandId, selection, null, serviceLocator);
}
public static void runCommand(String commandId, ISelection selection, Map<String, Object> parameters, IServiceLocator serviceLocator)
{
if (commandId != null) {
try {
......@@ -293,6 +301,24 @@ public class ActionUtils
}
}
}
Parameterization[] parametrization = null;
if (!CommonUtils.isEmpty(parameters)) {
parametrization = new Parameterization[parameters.size()];
int paramIndex = 0;
for (Map.Entry<String, Object> param : parameters.entrySet()) {
IParameter parameter = command.getParameter(param.getKey());
if (parameter != null) {
parametrization[paramIndex] = new Parameterization(parameter, CommonUtils.toString(param.getValue()));
} else {
log.debug("Parameter '" + param.getKey() + "' not found in command '" + commandId + "'");
parametrization[paramIndex] = null;
}
paramIndex++;
}
}
if (selection != null && needContextPatch) {
// Create new eval context
IEvaluationContext context = new EvaluationContext(
......@@ -302,11 +328,12 @@ public class ActionUtils
}
context.addVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME, selection);
ParameterizedCommand pc = new ParameterizedCommand(command, null);
ParameterizedCommand pc = new ParameterizedCommand(command, parametrization);
handlerService.executeCommandInContext(pc, null, context);
} else if (command != null) {
if (command.isEnabled()) {
handlerService.executeCommand(commandId, null);
ParameterizedCommand pc = new ParameterizedCommand(command, parametrization);
handlerService.executeCommand(pc, null);
} else {
log.warn("Command '" + commandId + "' is disabled");
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册