From b05589b2c341bed5b484d72ac5aed041828049d1 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Sun, 16 Apr 2017 00:43:34 +0300 Subject: [PATCH] Content panel menu contribution refactoring --- .../controls/resultset/ResultSetViewer.java | 17 +++++++- .../resultset/panel/ViewValuePanel.java | 16 +++++++- .../ui/data/editors/ContentPanelEditor.java | 16 +++++++- .../stream/AbstractTextPanelEditor.java | 40 +++++++++++++++---- .../data/managers/stream/TextPanelEditor.java | 6 +-- .../data/managers/stream/XMLPanelEditor.java | 9 ++++- 6 files changed, 87 insertions(+), 17 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java index 04f9691ad8..519e5583b6 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetViewer.java @@ -944,8 +944,23 @@ public class ResultSetViewer extends Viewer } // Try to get it from adapter if (activePresentation instanceof IAdaptable) { - return ((IAdaptable) activePresentation).getAdapter(adapter); + T adapted = ((IAdaptable) activePresentation).getAdapter(adapter); + if (adapted != null) { + return adapted; + } + } + // FIXME: Not sure that we should adapt active panel. NOT TESTED YET +/* + if (getVisiblePanel() instanceof IAdaptable) { + CTabItem panelTab = panelFolder.getSelection(); + if (panelTab != null && panelTab.getControl() != null && UIUtils.hasFocus(panelTab.getControl())) { + T adapted = ((IAdaptable) getVisiblePanel()).getAdapter(adapter); + if (adapted != null) { + return adapted; + } + } } +*/ return null; } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/panel/ViewValuePanel.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/panel/ViewValuePanel.java index 310f0ee904..e65ea4a27d 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/panel/ViewValuePanel.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/resultset/panel/ViewValuePanel.java @@ -16,6 +16,7 @@ */ package org.jkiss.dbeaver.ui.controls.resultset.panel; +import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.Separator; @@ -59,7 +60,7 @@ import org.jkiss.utils.CommonUtils; /** * RSV value view panel */ -public class ViewValuePanel implements IResultSetPanel { +public class ViewValuePanel implements IResultSetPanel, IAdaptable { private static final Log log = Log.getLog(ViewValuePanel.class); @@ -379,4 +380,17 @@ public class ViewValuePanel implements IResultSetPanel { }); } + @Override + public T getAdapter(Class adapter) { + if (valueEditor != null) { + if (adapter.isAssignableFrom(valueEditor.getClass())) { + return adapter.cast(valueEditor); + } + if (valueEditor instanceof IAdaptable) { + return ((IAdaptable) valueEditor).getAdapter(adapter); + } + } + + return null; + } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java index 334f6f79cf..8fb90650b6 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/editors/ContentPanelEditor.java @@ -16,6 +16,7 @@ */ package org.jkiss.dbeaver.ui.data.editors; +import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IContributionManager; @@ -61,7 +62,7 @@ import java.util.List; /** * ControlPanelEditor */ -public class ContentPanelEditor extends BaseValueEditor { +public class ContentPanelEditor extends BaseValueEditor implements IAdaptable { private static final Log log = Log.getLog(ContentPanelEditor.class); @@ -193,6 +194,19 @@ public class ContentPanelEditor extends BaseValueEditor { return dsId + ":" + valueId; } + @Override + public T getAdapter(Class adapter) { + if (streamEditor != null) { + if (adapter.isAssignableFrom(streamEditor.getClass())) { + return adapter.cast(streamEditor); + } + if (streamEditor instanceof IAdaptable) { + return ((IAdaptable) streamEditor).getAdapter(adapter); + } + } + return null; + } + private class ContentTypeSwitchAction extends Action implements SelectionListener { private Menu menu; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java index 31e0805326..4f8a109d2b 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/AbstractTextPanelEditor.java @@ -16,9 +16,11 @@ */ package org.jkiss.dbeaver.ui.data.managers.stream; +import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.widgets.Control; import org.jkiss.code.NotNull; @@ -26,11 +28,12 @@ import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.ui.controls.resultset.panel.ViewValuePanel; import org.jkiss.dbeaver.ui.data.IStreamValueEditor; import org.jkiss.dbeaver.ui.data.IValueController; +import org.jkiss.dbeaver.ui.editors.text.BaseTextEditor; /** * AbstractTextPanelEditor */ -public abstract class AbstractTextPanelEditor implements IStreamValueEditor { +public abstract class AbstractTextPanelEditor implements IStreamValueEditor, IAdaptable { public static final String PREF_TEXT_EDITOR_WORD_WRAP = "content.text.editor.word-wrap"; public static final String PREF_TEXT_EDITOR_AUTO_FORMAT = "content.text.editor.auto-format"; @@ -60,13 +63,15 @@ public abstract class AbstractTextPanelEditor implements IStreamValueEditor T getAdapter(Class adapter) { + BaseTextEditor textEditor = getTextEditor(); + if (textEditor != null) { + if (adapter.isAssignableFrom(textEditor.getClass())) { + return adapter.cast(textEditor); + } + return textEditor.getAdapter(adapter); + } + return null; + } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java index 3a6823870c..417fe82756 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/TextPanelEditor.java @@ -16,19 +16,15 @@ */ package org.jkiss.dbeaver.ui.data.managers.stream; -import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.data.DBDContent; -import org.jkiss.dbeaver.model.exec.DBCException; import org.jkiss.dbeaver.model.impl.StringContentStorage; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; -import org.jkiss.dbeaver.ui.data.IStreamValueEditor; import org.jkiss.dbeaver.ui.data.IValueController; -import org.jkiss.dbeaver.ui.data.editors.ContentPanelEditor; import org.jkiss.dbeaver.utils.ContentUtils; /** @@ -42,7 +38,7 @@ public class TextPanelEditor extends AbstractTextPanelEditor { StyledText text = new StyledText(valueController.getEditPlaceholder(), SWT.MULTI | SWT.V_SCROLL); text.setEditable(!valueController.isReadOnly()); text.setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT)); - setEditorSettings(text); + initEditorSettings(text); return text; } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java index ba43ba67b3..37a5df8dc1 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/data/managers/stream/XMLPanelEditor.java @@ -30,6 +30,7 @@ import org.jkiss.dbeaver.ui.data.IValueController; import org.jkiss.dbeaver.ui.editors.StringEditorInput; import org.jkiss.dbeaver.ui.editors.SubEditorSite; import org.jkiss.dbeaver.ui.editors.content.ContentEditorInput; +import org.jkiss.dbeaver.ui.editors.text.BaseTextEditor; import org.jkiss.dbeaver.ui.editors.xml.XMLEditor; import org.jkiss.dbeaver.utils.RuntimeUtils; @@ -55,7 +56,7 @@ public class XMLPanelEditor extends AbstractTextPanelEditor { return new StyledText(valueController.getEditPlaceholder(), SWT.NONE); } editor.createPartControl(valueController.getEditPlaceholder()); - setEditorSettings(editor.getEditorControl()); + initEditorSettings(editor.getEditorControl()); return editor.getEditorControl(); } @@ -67,6 +68,7 @@ public class XMLPanelEditor extends AbstractTextPanelEditor { monitor.subTask("Prime XML value"); IEditorInput sqlInput = new ContentEditorInput(valueController, null, null, monitor); editor.init(subSite, sqlInput); + applyEditorStyle(); } catch (Exception e) { throw new DBException("Can't load XML vaue", e); } finally { @@ -90,5 +92,8 @@ public class XMLPanelEditor extends AbstractTextPanelEditor { } } - + @Override + protected BaseTextEditor getTextEditor() { + return editor; + } } -- GitLab