commit bf128d5f65bf23ce1da82ed3ab36418f0c51547b
Author: Patrick Plitzner
Date: Tue May 29 15:41:04 2018 +0200
ref #7439 Add e4 context menu to nattable
- add full row selection
diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
index d99c333e4..2c6e94c4c 100644
--- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
+++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
@@ -9,6 +9,7 @@
package eu.etaxonomy.taxeditor.bulkeditor.e4;
+import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -33,9 +34,12 @@ import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.nebula.widgets.nattable.NatTable;
-import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
+import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration;
+import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
+import org.eclipse.nebula.widgets.nattable.data.IRowIdAccessor;
import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsEventLayer;
+import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultRowHeaderDataProvider;
@@ -45,10 +49,16 @@ import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.stack.DefaultBodyLayerStack;
+import org.eclipse.nebula.widgets.nattable.selection.RowSelectionModel;
+import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
+import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
+import org.eclipse.nebula.widgets.nattable.ui.menu.PopupMenuAction;
+import org.eclipse.nebula.widgets.nattable.ui.menu.PopupMenuBuilder;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
import ca.odell.glazedlists.BasicEventList;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
@@ -116,6 +126,9 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
private Composite bottomComposite;
+ @Inject
+ private EMenuService menuService;
+
@Inject
public BulkEditorE4() {
}
@@ -220,7 +233,7 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
propertyToLabels.put(getEditorInput().getName(), getEditorInput().getName());
propertyToLabels.put(TYPE_PROPERTY, TYPE_PROPERTY);
String[] propertyNames = new String[] { getEditorInput().getName(), TYPE_PROPERTY };
- IDataProvider bodyDataProvider = new ListDataProvider(list,
+ ListDataProvider bodyDataProvider = new ListDataProvider(list,
new BulkEditorPropertyAccessor(getEditorInput()));
@@ -249,13 +262,56 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
rowHeaderLayer, cornerLayer);
dataLayer.setColumnPercentageSizing(true);
- NatTable natTable = new NatTable(bottomComposite, gridLayer);
+ natTable = new NatTable(bottomComposite, gridLayer, false);
+
+ //create context menu
+ menuService.registerContextMenu(natTable, "eu.etaxonomy.taxeditor.bulkeditor.popupmenu.bulkeditor"); //$NON-NLS-1$
+ // get the menu registered by EMenuService
+ final Menu e4Menu = natTable.getMenu();
+
+ // remove the menu reference from NatTable instance
+ natTable.setMenu(null);
+
+ //add default configuration because autoconfigure is set to false in constructor
+ natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
+ natTable.addConfiguration(
+ new AbstractUiBindingConfiguration() {
+
+ @Override
+ public void configureUiBindings(
+ UiBindingRegistry uiBindingRegistry) {
+ // add NatTable menu items
+ // and register the DisposeListener
+ new PopupMenuBuilder(natTable, e4Menu)
+ .build();
+
+ // register the UI binding
+ uiBindingRegistry.registerMouseDownBinding(
+ new MouseEventMatcher(
+ SWT.NONE,
+ GridRegion.BODY,
+ MouseEventMatcher.RIGHT_BUTTON),
+ new PopupMenuAction(e4Menu));
+ }
+ });
+
+ natTable.configure();
GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
+
+ //full row selection
+ bodyLayer.getSelectionLayer().setSelectionModel(new RowSelectionModel(bodyLayer.getSelectionLayer(), bodyDataProvider, new IRowIdAccessor() {
+
+ @Override
+ public Serializable getRowId(CdmBase rowObject) {
+ return list.indexOf(rowObject);
+ }
+
+ }));
}
/** {@inheritDoc} */
@PostConstruct
- public void createPartControl(Composite parent, EMenuService menuService) {
+ public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout());
topComposite = new Composite(parent, SWT.NONE);
@@ -278,7 +334,6 @@ public class BulkEditorE4 implements IPartContentHasDetails, IConversationEnable
//create context menu
// menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.bulkeditor.popupmenu.bulkeditor"); //$NON-NLS-1$
-
}
@Override