Project

General

Profile

« Previous | Next » 

Revision bf128d5f

Added by Patrick Plitzner almost 6 years ago

ref #7439 Add e4 context menu to nattable

  • add full row selection

View differences:

eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/e4/BulkEditorE4.java
9 9

  
10 10
package eu.etaxonomy.taxeditor.bulkeditor.e4;
11 11

  
12
import java.io.Serializable;
12 13
import java.util.HashMap;
13 14
import java.util.List;
14 15
import java.util.Map;
......
33 34
import org.eclipse.jface.viewers.IStructuredSelection;
34 35
import org.eclipse.jface.viewers.TableViewer;
35 36
import org.eclipse.nebula.widgets.nattable.NatTable;
36
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
37
import org.eclipse.nebula.widgets.nattable.config.AbstractUiBindingConfiguration;
38
import org.eclipse.nebula.widgets.nattable.config.DefaultNatTableStyleConfiguration;
39
import org.eclipse.nebula.widgets.nattable.data.IRowIdAccessor;
37 40
import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
38 41
import org.eclipse.nebula.widgets.nattable.extension.glazedlists.GlazedListsEventLayer;
42
import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
39 43
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider;
40 44
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider;
41 45
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultRowHeaderDataProvider;
......
45 49
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
46 50
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
47 51
import org.eclipse.nebula.widgets.nattable.layer.stack.DefaultBodyLayerStack;
52
import org.eclipse.nebula.widgets.nattable.selection.RowSelectionModel;
53
import org.eclipse.nebula.widgets.nattable.ui.binding.UiBindingRegistry;
54
import org.eclipse.nebula.widgets.nattable.ui.matcher.MouseEventMatcher;
55
import org.eclipse.nebula.widgets.nattable.ui.menu.PopupMenuAction;
56
import org.eclipse.nebula.widgets.nattable.ui.menu.PopupMenuBuilder;
48 57
import org.eclipse.swt.SWT;
49 58
import org.eclipse.swt.layout.GridData;
50 59
import org.eclipse.swt.layout.GridLayout;
51 60
import org.eclipse.swt.widgets.Composite;
61
import org.eclipse.swt.widgets.Menu;
52 62

  
53 63
import ca.odell.glazedlists.BasicEventList;
54 64
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
......
116 126

  
117 127
    private Composite bottomComposite;
118 128

  
129
    @Inject
130
    private EMenuService menuService;
131

  
119 132
    @Inject
120 133
    public BulkEditorE4() {
121 134
	}
......
220 233
        propertyToLabels.put(getEditorInput().getName(), getEditorInput().getName());
221 234
        propertyToLabels.put(TYPE_PROPERTY, TYPE_PROPERTY);
222 235
        String[] propertyNames = new String[] { getEditorInput().getName(), TYPE_PROPERTY };
223
        IDataProvider bodyDataProvider = new ListDataProvider<CdmBase>(list,
236
        ListDataProvider bodyDataProvider = new ListDataProvider<CdmBase>(list,
224 237
                new BulkEditorPropertyAccessor(getEditorInput()));
225 238

  
226 239

  
......
249 262
                rowHeaderLayer, cornerLayer);
250 263

  
251 264
        dataLayer.setColumnPercentageSizing(true);
252
        NatTable natTable = new NatTable(bottomComposite, gridLayer);
265
        natTable = new NatTable(bottomComposite, gridLayer, false);
266

  
267
        //create context menu
268
        menuService.registerContextMenu(natTable, "eu.etaxonomy.taxeditor.bulkeditor.popupmenu.bulkeditor"); //$NON-NLS-1$
269
        // get the menu registered by EMenuService
270
        final Menu e4Menu = natTable.getMenu();
271

  
272
        // remove the menu reference from NatTable instance
273
        natTable.setMenu(null);
274

  
275
        //add default configuration because autoconfigure is set to false in constructor
276
        natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
277
        natTable.addConfiguration(
278
                new AbstractUiBindingConfiguration() {
279

  
280
            @Override
281
            public void configureUiBindings(
282
                    UiBindingRegistry uiBindingRegistry) {
283
                // add NatTable menu items
284
                // and register the DisposeListener
285
                new PopupMenuBuilder(natTable, e4Menu)
286
                    .build();
287

  
288
                // register the UI binding
289
                uiBindingRegistry.registerMouseDownBinding(
290
                        new MouseEventMatcher(
291
                                SWT.NONE,
292
                                GridRegion.BODY,
293
                                MouseEventMatcher.RIGHT_BUTTON),
294
                        new PopupMenuAction(e4Menu));
295
            }
296
        });
297

  
298
        natTable.configure();
253 299
        GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
300

  
301
        //full row selection
302
        bodyLayer.getSelectionLayer().setSelectionModel(new RowSelectionModel<CdmBase>(bodyLayer.getSelectionLayer(), bodyDataProvider, new IRowIdAccessor<CdmBase>() {
303

  
304
            @Override
305
            public Serializable getRowId(CdmBase rowObject) {
306
                return list.indexOf(rowObject);
307
            }
308

  
309
        }));
254 310
	}
255 311

  
256 312
	/** {@inheritDoc} */
257 313
	@PostConstruct
258
	public void createPartControl(Composite parent, EMenuService menuService) {
314
	public void createPartControl(Composite parent) {
259 315
		parent.setLayout(new GridLayout());
260 316

  
261 317
		topComposite = new Composite(parent, SWT.NONE);
......
278 334

  
279 335
        //create context menu
280 336
//        menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.bulkeditor.popupmenu.bulkeditor"); //$NON-NLS-1$
281

  
282 337
	}
283 338

  
284 339
	@Override

Also available in: Unified diff