提交 8e4756a1 编写于 作者: J jurgen

Folder pages activation. Single control editor model

上级 19107b33
/*
* Copyright (C) 2010-2015 Serge Rieder
* serge@jkiss.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jkiss.dbeaver.ext;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorPart;
import org.jkiss.code.NotNull;
/**
* Editor with single main control.
* Usually used by editors represented by text of table/tree control.
*/
public interface ISingleControlEditor extends IEditorPart
{
/**
* Gets main editor control
* @return control
*/
@NotNull
Control getEditorControl();
}
\ No newline at end of file
......@@ -24,20 +24,19 @@ import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorPart;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ext.ISingleControlEditor;
import javax.activation.MimeType;
/**
* Database content editor
*/
public interface ContentEditorPart extends IEditorPart {
public interface ContentEditorPart extends IEditorPart, ISingleControlEditor {
void initPart(IEditorPart contentEditor, @Nullable MimeType mimeType);
IEditorActionBarContributor getActionBarContributor();
Control getEditorControl();
String getContentTypeTitle();
Image getContentTypeImage();
......
......@@ -22,6 +22,7 @@ import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorPart;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.ui.DBIcon;
import org.jkiss.dbeaver.ui.editors.binary.BinaryEditor;
import org.jkiss.dbeaver.ui.editors.content.ContentEditorPart;
......@@ -48,6 +49,7 @@ public class ContentBinaryEditorPart extends BinaryEditor implements ContentEdit
return null;
}
@NotNull
@Override
public Control getEditorControl()
{
......
......@@ -18,6 +18,7 @@
*/
package org.jkiss.dbeaver.ui.editors.content.parts;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.core.Log;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
......@@ -132,6 +133,7 @@ public class ContentImageEditorPart extends EditorPart implements ContentEditorP
return null;
}
@NotNull
@Override
public Control getEditorControl()
{
......
......@@ -55,12 +55,6 @@ public class ContentTextEditorPart extends BaseTextEditor implements ContentEdit
return null;
}
@Override
public Control getEditorControl()
{
return getTextViewer().getTextWidget();
}
@Override
public String getContentTypeTitle()
{
......
......@@ -56,12 +56,6 @@ public class ContentXMLEditorPart extends XMLEditor implements ContentEditorPart
return null;
}
@Override
public Control getEditorControl()
{
return getTextViewer().getTextWidget();
}
@Override
public String getContentTypeTitle()
{
......
......@@ -23,17 +23,17 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.*;
import org.eclipse.ui.internal.services.INestable;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.ui.part.MultiPageEditorSite;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.core.Log;
import org.jkiss.dbeaver.ext.IDatabaseEditor;
import org.jkiss.dbeaver.ext.IDatabaseEditorContributorManager;
import org.jkiss.dbeaver.ext.IDatabaseEditorContributorUser;
import org.jkiss.dbeaver.ext.IPropertyChangeReflector;
import org.jkiss.dbeaver.ext.*;
import org.jkiss.dbeaver.ext.ui.IActiveWorkbenchPart;
import org.jkiss.dbeaver.ext.ui.IRefreshablePart;
import org.jkiss.dbeaver.registry.editor.EntityEditorDescriptor;
......@@ -94,6 +94,33 @@ public class FolderPageEditor extends FolderPage implements IDatabaseEditorContr
UIUtils.showErrorDialog(parent.getShell(), "Create SQL viewer", null, e);
}
editor.createPartControl(parent);
if (editor instanceof ISingleControlEditor) {
// Use focus to active selection provider and contributed actions
Control editorControl = ((ISingleControlEditor) editor).getEditorControl();
editorControl.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
ISelectionProvider selectionProvider = editor.getSite().getSelectionProvider();
mainEditor.getSite().setSelectionProvider(selectionProvider);
selectionProvider.setSelection(selectionProvider.getSelection());
if (actionContributor != null) {
actionContributor.setActiveEditor(editor);
}
activateNestedSite(true);
}
@Override
public void focusLost(FocusEvent e) {
activateNestedSite(false);
if (actionContributor != null) {
actionContributor.setActiveEditor(null);
}
}
});
}
parent.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
......@@ -119,19 +146,6 @@ public class FolderPageEditor extends FolderPage implements IDatabaseEditorContr
if (editor instanceof IActiveWorkbenchPart) {
((IActiveWorkbenchPart) editor).activatePart();
}
//sqlViewer.enableUndoManager(true);
ISelectionProvider selectionProvider = editor.getSite().getSelectionProvider();
mainEditor.getSite().setSelectionProvider(selectionProvider);
selectionProvider.setSelection(selectionProvider.getSelection());
//selectionProvider.setSelection(new StructuredSelection());
if (actionContributor != null) {
actionContributor.setActiveEditor(editor);
}
activateSectionSite(true);
//sqlViewer.handleActivate();
}
@Override
......@@ -139,17 +153,10 @@ public class FolderPageEditor extends FolderPage implements IDatabaseEditorContr
if (editor instanceof IActiveWorkbenchPart) {
((IActiveWorkbenchPart) editor).deactivatePart();
}
activateSectionSite(false);
if (actionContributor != null) {
actionContributor.setActiveEditor(null);
}
// if (sqlViewer != null) {
// //sqlViewer.enableUndoManager(false);
// }
}
@SuppressWarnings("deprecation")
private void activateSectionSite(boolean activate) {
private void activateNestedSite(boolean activate) {
if (nestedEditorSite instanceof INestable) {
if (activate) {
((INestable) nestedEditorSite).activate();
......
......@@ -89,6 +89,7 @@ class FolderPageNode extends FolderPage implements ISearchContextProvider, IRefr
parent.layout();
// Activate items control on focus
itemControl.getItemsViewer().getControl().addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
......
......@@ -29,6 +29,8 @@ import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
......@@ -142,6 +144,23 @@ public abstract class SQLEditorNested<T extends DBSObject>
editorSash.setWeights(new int[]{70, 30});
editorSash.setMaximizedControl(editorControl);
}
// Use focus to activate page control
getEditorControl().addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
if (pageControl != null && !pageControl.isDisposed()) {
pageControl.activate(true);
}
}
@Override
public void focusLost(FocusEvent e) {
if (pageControl != null && !pageControl.isDisposed()) {
pageControl.activate(false);
}
}
});
}
@Override
......@@ -171,16 +190,10 @@ public abstract class SQLEditorNested<T extends DBSObject>
log.error(e);
}
}
if (pageControl != null && !pageControl.isDisposed()) {
pageControl.activate(true);
}
}
@Override
public void deactivatePart() {
if (pageControl != null && !pageControl.isDisposed()) {
pageControl.activate(false);
}
}
@Override
......
......@@ -37,16 +37,19 @@ import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.texteditor.AbstractTextEditor;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.StatusTextEditor;
import org.eclipse.ui.texteditor.rulers.*;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.ext.ICommentsSupport;
import org.jkiss.dbeaver.ext.ISingleControlEditor;
import org.jkiss.dbeaver.model.impl.resources.ScriptsHandlerImpl;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
......@@ -66,7 +69,7 @@ import java.util.Map;
* Abstract text editor.
* Contains some common dbeaver text editor adaptions.
*/
public abstract class BaseTextEditor extends StatusTextEditor {
public abstract class BaseTextEditor extends StatusTextEditor implements ISingleControlEditor {
private final static String LINE_NUMBER_RULER = "lineNumberRule";
......@@ -105,6 +108,12 @@ public abstract class BaseTextEditor extends StatusTextEditor {
return provider == null ? null : (Document)provider.getDocument(getEditorInput());
}
@NotNull
@Override
public Control getEditorControl() {
return getTextViewer().getTextWidget();
}
@Override
public void createPartControl(Composite parent)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册