Bug 539164 - Tabbing is not working in E4 table editors
Change-Id: I53468f930e539e46740d16d2d600ca3a89c92a85
Signed-off-by: Christof Joswig <christof.joswig@sap.com>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java
index c24ed86..c274e34 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/E4PickList.java
@@ -37,11 +37,20 @@
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.resource.FontDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellNavigationStrategy;
+import org.eclipse.jface.viewers.ColumnViewer;
+import org.eclipse.jface.viewers.ColumnViewerEditor;
+import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
+import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewerEditor;
+import org.eclipse.jface.viewers.TableViewerFocusCellManager;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Composite;
/**
@@ -61,6 +70,7 @@
AbstractComponentEditor componentEditor;
EStructuralFeature feature;
+ TableViewerFocusCellManager focusCellMgr;
public static class Struct {
final public String label;
@@ -102,6 +112,14 @@
new ComponentLabelProvider(componentEditor.getEditor(), new Messages(), italicFontDescriptor)));
final ObservableListContentProvider cp = new ObservableListContentProvider();
viewer.setContentProvider(cp);
+
+ // enable tabbing and keyboard activation
+ this.focusCellMgr = new TableViewerFocusCellManager(viewer, new FocusCellOwnerDrawHighlighter(viewer),
+ new CellNavigationStrategy());
+
+ TableViewerEditor.create(viewer, this.focusCellMgr, new TableViewerEditorActivationStrategy(viewer), //
+ ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
+ | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
}
/**
@@ -257,4 +275,37 @@
}
return ((ObservableListContentProvider) viewer.getContentProvider()).getElements(viewer.getInput()).length;
}
+
+ private class TableViewerEditorActivationStrategy extends ColumnViewerEditorActivationStrategy {
+
+ public TableViewerEditorActivationStrategy(ColumnViewer viewer) {
+ super(viewer);
+ }
+
+ @Override
+ protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
+ if (event != null) {
+
+ if (event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION) {
+ MouseEvent mouseEvent = (MouseEvent) event.sourceEvent;
+ if ((mouseEvent.stateMask & SWT.MOD1) != 0) {
+ return false;
+ }
+ }
+
+ if (event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
+ || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC
+ || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
+ || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION
+ && ((event.stateMask & SWT.MOD1) == 0)
+ || (event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
+ && (event.keyCode == SWT.F2 || event.keyCode == 32 || event.character == SWT.CR))) {
+
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
}