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

Context activation refactoring

上级 f7032c95
......@@ -25,10 +25,10 @@ import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseWheelListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
......@@ -36,6 +36,7 @@ import org.eclipse.ui.themes.IThemeManager;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.data.DBDAttributeBinding;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import java.util.ArrayList;
import java.util.List;
......@@ -189,24 +190,7 @@ public abstract class AbstractPresentation implements IResultSetPresentation, IS
UIUtils.addFocusTracker(site, PRESENTATION_CONTROL_ID, control);
// RSV control context
final IContextService contextService = site.getService(IContextService.class);
if (contextService != null) {
control.addFocusListener(new FocusListener() {
IContextActivation activation;
@Override
public void focusGained(FocusEvent e) {
if (activation == null) {
activation = contextService.activateContext(RESULTS_CONTROL_CONTEXT_ID);
}
}
@Override
public void focusLost(FocusEvent e) {
contextService.deactivateContext(activation);
activation = null;
}
});
}
control.addDisposeListener(e -> UIUtils.removeFocusTracker(site, control));
EditorUtils.trackControlContext(site, control, RESULTS_CONTROL_CONTEXT_ID);
// Enable horizontal scrolling
control.addMouseWheelListener(e -> {
......
......@@ -25,8 +25,6 @@ import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.DBeaverPreferences;
......@@ -37,6 +35,7 @@ import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.data.IMultiController;
import org.jkiss.dbeaver.ui.data.IValueController;
import org.jkiss.dbeaver.ui.data.IValueEditor;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
/**
* BaseValueEditor
......@@ -87,25 +86,7 @@ public abstract class BaseValueEditor<T extends Control> implements IValueEditor
// inlineControl.setBackground(valueController.getEditPlaceholder().getBackground());
// }
final IContextService contextService = valueController.getValueSite().getService(IContextService.class);
inlineControl.addFocusListener(new FocusListener() {
private IContextActivation activationEditor;
@Override
public void focusGained(FocusEvent e) {
if (contextService != null) {
activationEditor = contextService.activateContext(RESULTS_EDIT_CONTEXT_ID);
}
}
@Override
public void focusLost(FocusEvent e) {
contextService.deactivateContext(activationEditor);
activationEditor = null;
}
});
inlineControl.addDisposeListener(e -> {
control = null;
});
EditorUtils.trackControlContext(valueController.getValueSite(), inlineControl, RESULTS_EDIT_CONTEXT_ID);
if (isInline) {
inlineControl.setFont(valueController.getEditPlaceholder().getFont());
......
......@@ -28,7 +28,12 @@ import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.*;
import org.eclipse.ui.contexts.IContextActivation;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.ide.FileStoreEditorInput;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
......@@ -40,6 +45,7 @@ import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPExternalFileManager;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.utils.CommonUtils;
......@@ -263,4 +269,30 @@ public class EditorUtils {
return new ScopedPreferenceStore(InstanceScope.INSTANCE, "org.eclipse.ui.editors");
}
public static void trackControlContext(IWorkbenchSite site, Control control, String contextId) {
final IContextService contextService = site.getService(IContextService.class);
if (contextService != null) {
control.addFocusListener(new FocusListener() {
IContextActivation activation;
@Override
public void focusGained(FocusEvent e) {
if (activation == null) {
activation = contextService.activateContext(contextId);
}
}
@Override
public void focusLost(FocusEvent e) {
if (activation != null) {
contextService.deactivateContext(activation);
activation = null;
}
}
});
}
control.addDisposeListener(e -> UIUtils.removeFocusTracker(site, control));
}
}
......@@ -1267,8 +1267,8 @@ public class SQLEditor extends SQLEditorBase implements
final CTabItem item = new CTabItem(resultTabs, SWT.CLOSE);
item.setControl(planView.getControl());
item.setText("Exec. Plan");
item.setToolTipText("Execution plan for\n" + sqlQuery.getText());
item.setText(CoreMessages.editors_sql_error_execution_plan_title);
item.setToolTipText(CoreMessages.editors_sql_error_execution_plan_title);
item.setImage(IMG_EXPLAIN_PLAN);
item.setData(planView);
UIUtils.disposeControlOnItemDispose(item);
......
......@@ -58,6 +58,7 @@ import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.*;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLCharacterPairMatcher;
import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLPartitionScanner;
import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLRuleManager;
......@@ -250,27 +251,7 @@ public abstract class SQLEditorBase extends BaseTextEditor implements IErrorVisu
{
// Context listener
StyledText control = getViewer().getTextWidget();
final IContextService contextService = getSite().getService(IContextService.class);
if (contextService != null) {
control.addFocusListener(new FocusListener() {
IContextActivation activation;
@Override
public void focusGained(FocusEvent e) {
if (activation == null) {
activation = contextService.activateContext(SQL_CONTROL_CONTEXT_ID);
}
}
@Override
public void focusLost(FocusEvent e) {
contextService.deactivateContext(activation);
activation = null;
}
});
}
control.addDisposeListener(e -> UIUtils.removeFocusTracker(getSite(), control));
EditorUtils.trackControlContext(getSite(), getViewer().getTextWidget(), SQL_CONTROL_CONTEXT_ID);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册