blob: 783fc90ae1c12f29a95954c8e3eeb03146351d9f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) 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
*******************************************************************************/
/**
*
*/
package org.eclipse.emf.parsley.builders;
import java.util.List;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.parsley.factories.ColumnLabelProviderFactory;
import org.eclipse.emf.parsley.ui.provider.FeaturesColumnProvider;
import org.eclipse.emf.parsley.ui.provider.FeatureCaptionProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import com.google.inject.Inject;
/**
* Sets the columns of a TableViewer according to an EClass (adds a column for
* each feature of the EClass).
*
* @author Lorenzo Bettini
*
*/
public class TableViewerColumnBuilder {
private static final int DEFAULT_WEIGHT = 3;
@Inject
protected ColumnLabelProviderFactory columnLabelProviderFactory;
@Inject
protected FeatureCaptionProvider featureCaptionProvider;
@Inject
protected FeaturesColumnProvider featuresProvider;
public void buildTableViewer(TableViewer tableViewer, EClass eClass) {
buildTableViewer(tableViewer, eClass, null);
}
/**
* @param tableViewer
* @param eClass
*/
public void buildTableViewer(TableViewer tableViewer, EClass eClass,
IStructuredContentProvider contentProvider) {
final Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout layout = new TableLayout();
table.setLayout(layout);
table.setHeaderVisible(true);
table.setLinesVisible(true);
List<EStructuralFeature> typeFeatures = featuresProvider
.getFeatures(eClass);
int i=0;
for (EStructuralFeature eStructuralFeature : typeFeatures) {
int weight=DEFAULT_WEIGHT;
if(featuresProvider.getWeights()!=null && featuresProvider.getWeights().size()>i){
weight=featuresProvider.getWeights().get(i++);
}
buildTableViewerColumn(tableViewer, layout, eStructuralFeature,
contentProvider,weight);
}
}
protected TableViewerColumn buildTableViewerColumn(TableViewer tableViewer,
TableLayout layout, EStructuralFeature eStructuralFeature,
IStructuredContentProvider contentProvider) {
return buildTableViewerColumn(tableViewer, layout, eStructuralFeature, contentProvider,DEFAULT_WEIGHT);
}
protected TableViewerColumn buildTableViewerColumn(TableViewer tableViewer,
TableLayout layout, EStructuralFeature eStructuralFeature,
IStructuredContentProvider contentProvider, int weight) {
TableViewerColumn viewerColumn = createTableViewerColumn(tableViewer,
eStructuralFeature, contentProvider);
TableColumn objectColumn = viewerColumn.getColumn();
layout.addColumnData(new ColumnWeightData(weight, 30, true));
objectColumn.setText(featureCaptionProvider.getText(eStructuralFeature));
objectColumn.setResizable(true);
return viewerColumn;
}
protected TableViewerColumn createTableViewerColumn(
TableViewer tableViewer, EStructuralFeature eStructuralFeature,
IStructuredContentProvider contentProvider) {
TableViewerColumn tableViewerColumn = new TableViewerColumn(
tableViewer, SWT.NONE);
if (contentProvider != null) {
tableViewerColumn.setLabelProvider(columnLabelProviderFactory
.createColumnLabelProvider(eStructuralFeature,
contentProvider));
} else {
tableViewerColumn.setLabelProvider(columnLabelProviderFactory
.createColumnLabelProvider(eStructuralFeature));
}
return tableViewerColumn;
}
}