/******************************************************************************* * Copyright (c) 2008 Hallvard Traetteberg. * 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: * Hallvard Traetteberg - initial API and implementation ******************************************************************************/ package org.eclipse.e4.tm.builder.swt; import org.eclipse.e4.tm.builder.IBinder; import org.eclipse.e4.tm.builder.jface.LabeledLabelProvider; import org.eclipse.e4.tm.builder.jface.LabeledTableLabelProvider; import org.eclipse.e4.tm.util.Labeled; import org.eclipse.e4.tm.util.UtilPackage; import org.eclipse.e4.tm.widgets.Control; import org.eclipse.e4.tm.widgets.TableViewer; import org.eclipse.e4.tm.widgets.WidgetsPackage; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class TableViewerBinder extends ControlBinder implements IBinder { protected boolean shouldntHandleFeature(EStructuralFeature feature) { if (feature == WidgetsPackage.eINSTANCE.getTableViewer_ViewProviders()) { return true; } return super.shouldntHandleFeature(feature); } protected void update(EObject control, EStructuralFeature feature, Object object, boolean isInit) { if (feature == WidgetsPackage.eINSTANCE.getTableViewer_ContentProvider() && (! (object instanceof Viewer))) { update(control, feature, adapt(object, Viewer.class), isInit); } else { super.update(control, feature, object, isInit); } } protected void invalidateFeature(EObject eObject, EStructuralFeature feature, Object object, boolean isEvent) { if (eObject instanceof TableViewer && feature == UtilPackage.eINSTANCE.getObjectData_DataObject()) { updateViewerContent((TableViewer)eObject, context.getObject(eObject, Viewer.class)); } super.invalidateFeature(eObject, feature, object, isEvent); } private void updateViewerContent(TableViewer tableViewer, Viewer viewer) { viewer.setInput(tableViewer.getDataObject()); Table table = ((org.eclipse.jface.viewers.TableViewer)viewer).getTable(); for (int i = 0, n = table.getColumnCount(); i < n; i++) { table.getColumn(i).pack(); } } protected Object create(EObject control) { Composite parent = super.getParent(control, Composite.class); org.eclipse.jface.viewers.TableViewer viewer = new org.eclipse.jface.viewers.TableViewer(parent, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); LabeledTableLabelProvider labelProvider = new LabeledTableLabelProvider(); boolean headerVisible = true; int columnCount = ((TableViewer)control).getViewProviders().size(), columnNum = 0; for (Control viewProvider: ((TableViewer)control).getViewProviders()) { LabeledLabelProvider columnLabelProvider = new LabeledLabelProvider((Labeled)viewProvider); labelProvider.addLabelProvider(columnLabelProvider); TableViewerColumn column = new TableViewerColumn(viewer, SWT.LEFT); TableColumn tableColumn = column.getColumn(); String headerText = null; try { headerText = columnLabelProvider.getText(null); } catch (Exception e) { } tableColumn.setText(String.valueOf(++columnNum)); if (headerText != null) { // tableColumn.setText(headerText); } else { headerVisible = false; } tableColumn.setResizable(true); tableColumn.setMoveable(true); } viewer.setLabelProvider(labelProvider); Table table = viewer.getTable(); table.setHeaderVisible(headerVisible); table.setLinesVisible(true); table.setData(Viewer.class.getName(), viewer); return table; } }