blob: d1101437d9850f7f042fa74af7f14eea06611f33 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2016 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* jonas - initial API and implementation
******************************************************************************/
package org.eclipse.emf.ecp.view.spi.table.nebula.grid;
import javax.inject.Inject;
import org.eclipse.core.databinding.observable.list.IObservableList;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.table.internal.nebula.grid.GridCopyKeyListener;
import org.eclipse.emf.ecp.view.spi.table.internal.nebula.grid.GridPasteKeyListener;
import org.eclipse.emf.ecp.view.spi.table.model.VTableControl;
import org.eclipse.emf.ecp.view.spi.table.swt.TableControlSWTRenderer;
import org.eclipse.emf.ecp.view.spi.util.swt.ImageRegistryService;
import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
import org.eclipse.emf.ecp.view.template.style.background.model.VTBackgroundStyleProperty;
import org.eclipse.emf.ecp.view.template.style.fontProperties.model.VTFontPropertiesStyleProperty;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
import org.eclipse.emfforms.spi.core.services.editsupport.EMFFormsEditSupport;
import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
import org.eclipse.emfforms.spi.swt.table.TableViewerCompositeBuilder;
import org.eclipse.emfforms.spi.swt.table.TableViewerCreator;
import org.eclipse.emfforms.spi.swt.table.TableViewerSWTBuilder;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.jface.gridviewer.GridViewerEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.ScrollBar;
/**
* @author Jonas Helming
* @since 1.10
*
*/
public class GridControlSWTRenderer extends TableControlSWTRenderer {
/**
* Default constructor.
*
* @param vElement the view model element to be rendered
* @param viewContext the view context
* @param emfFormsDatabinding The {@link EMFFormsDatabindingEMF}
* @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
* @param reportService The {@link ReportService}
* @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
* @param imageRegistryService The {@link ImageRegistryService}
* @param emfFormsEditSupport The {@link EMFFormsEditSupport}
* @since 1.
*/
@Inject
// CHECKSTYLE.OFF: ParameterNumber
public GridControlSWTRenderer(VTableControl vElement, ViewModelContext viewContext, ReportService reportService,
EMFFormsDatabindingEMF emfFormsDatabinding, EMFFormsLabelProvider emfFormsLabelProvider,
VTViewTemplateProvider vtViewTemplateProvider, ImageRegistryService imageRegistryService,
EMFFormsEditSupport emfFormsEditSupport) {
// CHECKSTYLE.ON: ParameterNumber
super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider, vtViewTemplateProvider,
imageRegistryService, emfFormsEditSupport);
}
/**
* {@link TableViewerCreator} for the table control swt renderer. It will create a GridTableViewer with the expected
* custom variant data and the correct style properties as defined in the template model.
*
*/
protected final class GridTableControlSWTRendererTableViewerCreator implements TableViewerCreator<GridTableViewer> {
@Override
public GridTableViewer createTableViewer(Composite parent) {
final GridTableViewer tableViewer = new GridTableViewer(parent,
SWT.MULTI | SWT.V_SCROLL | SWT.BORDER);
tableViewer.getGrid().setData(CUSTOM_VARIANT, TABLE_CUSTOM_VARIANT);
tableViewer.getGrid().setHeaderVisible(true);
tableViewer.getGrid().setLinesVisible(true);
tableViewer.getGrid().setCellSelectionEnabled(true);
tableViewer.getGrid().setFooterVisible(false);
tableViewer.getGrid().setRowHeaderVisible(true);
tableViewer.getGrid().addKeyListener(new GridCopyKeyListener(tableViewer.getGrid().getDisplay()));
tableViewer.getGrid().addKeyListener(new GridPasteKeyListener(tableViewer.getGrid().getDisplay()));
/* Set background color */
final VTBackgroundStyleProperty backgroundStyleProperty = getBackgroundStyleProperty();
if (backgroundStyleProperty.getColor() != null) {
tableViewer.getGrid().setBackground(getSWTColor(backgroundStyleProperty.getColor()));
}
/* Set foreground color */
final VTFontPropertiesStyleProperty fontPropertiesStyleProperty = getFontPropertiesStyleProperty();
if (fontPropertiesStyleProperty.getColorHEX() != null) {
tableViewer.getGrid()
.setForeground(getSWTColor(fontPropertiesStyleProperty.getColorHEX()));
}
tableViewer.getGrid().setData(FIXED_COLUMNS, new Integer(1));
/* manage editing support activation */
createTableViewerEditor(tableViewer);
return tableViewer;
}
/**
* This method creates and initialises a {@link GridViewerEditor} for the given {@link GridTableViewer}.
*
* @param gridTableViewer the table viewer
*/
protected void createTableViewerEditor(final GridTableViewer gridTableViewer) {
// TODO Grid
// final TableViewerFocusCellManager focusCellManager = new TableViewerFocusCellManager(tableViewer,
// new org.eclipse.emf.ecp.edit.internal.swt.controls.ECPFocusCellDrawHighlighter(tableViewer));
final ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(
gridTableViewer) {
@Override
protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
|| event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
|| event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
&& (event.keyCode == SWT.CR || event.keyCode == 16777296)
|| event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
}
};
GridViewerEditor.create(
gridTableViewer,
actSupport,
ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
}
}
@Override
protected TableViewerCreator<GridTableViewer> getTableViewerCreator() {
return new GridTableControlSWTRendererTableViewerCreator();
}
@Override
// CHECKSTYLE.OFF: ParameterNumber
protected TableViewerSWTBuilder getTableViewerSWTBuilder(Composite parent, IObservableList list,
IObservableValue labelText, IObservableValue labelTooltipText, TableViewerCompositeBuilder compositeBuilder,
ObservableListContentProvider cp, ECPTableViewerComparator comparator,
TableControlSWTRendererButtonBarBuilder tableControlSWTRendererButtonBarBuilder) {
// CHECKSTYLE.ON: ParameterNumber
return GridTableViewerFactory.fillDefaults(parent, SWT.NONE, list, labelText, labelTooltipText)
.customizeCompositeStructure(compositeBuilder)
.customizeButtons(tableControlSWTRendererButtonBarBuilder)
.customizeTableViewerCreation(getTableViewerCreator())
.customizeContentProvider(cp)
.customizeComparator(comparator);
}
@Override
protected int getSelectionIndex() {
return ((GridTableViewer) getTableViewer()).getGrid().getSelectionIndex();
}
@Override
protected Item[] getColumns() {
return ((GridTableViewer) getTableViewer()).getGrid().getColumns();
}
@Override
protected ScrollBar getHorizontalBar() {
return ((GridTableViewer) getTableViewer()).getGrid().getHorizontalBar();
}
@Override
protected ScrollBar getVerticalBar() {
return ((GridTableViewer) getTableViewer()).getGrid().getVerticalBar();
}
}